2009-03-19 2 views
0

Я пытаюсь сделать то, что мне исторически доступно, используя Visual FoxPro (VFP). Используя функцию «SETALL()», я могу сделать что-то вроде текущей текущей формы ... this.SetAll («someProperty», «toSomeNewValue»), и она проходит и присваивает значение всем элементам управления. Создав собственное пользовательское свойство и внутреннюю часть VFP через «_assign», вызовет эти события. С помощью метода THAT каждый элемент управления будет заботиться о себе по форме: от включения/выключения/видимости, редактирования, чтения, цвета, шрифта, проверки и т. Д. На основе того, что я помещаю в каждый отдельный элемент управления.Делегирование управления при изменении значения/свойства

Итак, как бы я сделал аналогичную вещь в C# ... Такие, как публичное свойство, метод или делегат на уровне формы, например «FormEditMode». Затем, когда я делаю что-то вроде этого. FormEditMode = AddMode, все элементы управления будут запускаться самостоятельно, чтобы включить/выключить, включить/отключить соответственно вместо явных вызовов для всех элементов управления в данной форме.

Благодаря

ответ

0

Я на самом деле решил его, получив каждый элемент управления, зарегистрированный в конце вызова функции InitialzeComponents(), и комбинацию других частей, которые я прочитал в своих исследованиях для решения.

После создания моей базовой линии, текстового поля, элементов управления метками (и других), после InitializeComponents(), я делаю рекурсивный вызов для каждого элемента управления в форме и регистрирую его метод для делегата/события формы. Затем, во время вызова изменить режим редактирования формы, он вызывает вызов делегата и запускает каждый элемент управления функциями. Итак, я получаю лучший дескриптор обработки делегатов/событий, а теперь - рекурсивный вызов. Это выполняется ONCE спереди, поэтому мне не нужно постоянно рекурсивно проверять и вызывать во время нажатия кнопки или какое-либо другое условие, чтобы циклически управлять элементами управления каждый раз, когда мне нужно что-то делать.

1

Я бы просто сделать что-то вроде этого:

this.Visible = false; 
Controls.ForEach<Control>(c => c.Visible = false); 

Если у вас есть рамки группы или другие элементы управления, которые имеют элементы управления, вы можете захотеть положить, что в рекурсивную функцию:

static void DoForEachControl(Control control, Action<Control> f) 
{ 
    control.Controls.ForEach<Control>(c => 
             { 
             f(c); 
             DoForEachControl(c, f); 
             }); 
} 

Для получения этого ForEach вам понадобится примерно следующее:

public static class Extensions 
    { 
    public static void ForEach<T>(this IEnumerable source, Action<T> action) 
    { 
     foreach (var item in source) 
     { 
     action((T)item); 
     } 
    } 
    } 
Смежные вопросы