Делегирование управления при изменении значения / свойства - PullRequest
0 голосов
/ 19 марта 2009

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 19 марта 2009

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

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

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

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);
      }
    }
  }
0 голосов
/ 08 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...