Я использую ту же форму для ввода новых данных и ввода существующих записей, например. для поставщиков, предметов запаса, клиентов и т. д. В режиме редактирования я устанавливал все текстовые поля только для чтения, и как только пользователь выбрал запись для редактирования, я возвращаю статус только для чтения на значение false. Форма может содержать несколько вкладок (или PageViewPages в Telerik), каждая из которых содержит несколько редактируемых элементов управления, которые должны быть установлены только для чтения true/false.Отправка различных элементов управления в качестве параметров для метода
Этот код используется для отправки массива контейнеров классу с именем FormControl.
RadGroupBox [] containerList = { this.pageGeneral, this.pageBankDetail, this.pageContact };
FormControl.ControlsReadOnly(containerList, false); // /truefalse to set Read-only status
В классе FormControl У меня есть следующий код, чтобы установить статус «Только для чтения».
public static void ControlsReadOnly(RadGroupBox [] containerList, bool readOnlyStatus)
{
var container = (containerList[0] as RadGroupBox);
for (int i = 0; i < containerList.Length; i++)
{
foreach (var control in container.Controls)
{
RadTextBox textEdit = control as RadTextBox;
if (textEdit != null)
{
textEdit.ReadOnly = readOnlyStatus;
continue;
}
RadMaskedEditBox textMasked = control as RadMaskedEditBox;
if (textMasked != null)
{
textMasked.ReadOnly = readOnlyStatus;
continue;
}
// rest of the code
код работает хорошо, но очевидным недостатком является то, что он работает только тогда, когда контейнер является RadGroupBox. Я хочу использовать тот же код для обработки форм, групповых полей и PageViews, изменив тип управления в вызывающей форме.
Я подозреваю, что ответ будет включать Reflection, но я не могу его решить. Я попытался заменить список параметров в методе FormControl на Control [] containerList, но тогда я больше не могу использовать переменную var.
Похоже на то, что у вас будет непростое время сделать этот родовой. Разве вам не придется заменять «var container = (containerList [0] как RadGroupBox);« с другими типами тоже? Возможно, это слишком мало, чтобы быть единственным методом. Рассмотрите перегрузки, а затем вызовите общий метод из каждой перегрузки (приемника). – DonBoitnott
Это была моя первая мысль, и на самом деле, как я ее реализовал: один метод для каждой возможности. Однако перегрузка может работать, я проверю. – PeterJ