Как обнаружить изменения в любом контроле формы? - PullRequest
7 голосов
/ 26 августа 2010

Как я могу обнаружить изменения в любом элементе управления формы в C #?

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

Ответы [ 2 ]

14 голосов
/ 26 августа 2010

Нет, я не знаю ни одного события, которое возникает, когда любой элемент управления в форме изменяется.

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

Если вы абсолютно должны подписаться на изменения всех элементов управления, то вы можете рассмотреть что-то похожее на следующее:

foreach (Control c in this.Controls)
{
    c.TextChanged += new EventHandler(c_ControlChanged);
}

void c_ControlChanged(object sender, EventArgs e)
{

}

Обратите внимание, что это не сработает особенно хорошо, если вы динамически добавляете и удаляете элементы управления в форму во время выполнения.

Кроме того, событие TextChanged может не подходить для некоторых типов элементов управления (например, TextBoxes) - в этом случае вам нужно будет привести и проверить тип элемента управления, чтобы иметь возможность подписаться на правильное событие, например:

foreach (Control c in this.Controls)
{
    if (c is CheckBox)
    {
        ((CheckBox)c).CheckedChanged += c_ControlChanged;
    }
    else
    {
        c.TextChanged += new EventHandler(c_ControlChanged);
    }
}
5 голосов
/ 26 августа 2010

Вместо прямого доступа к элементам управления вы можете привязать данные к объекту модели, который реализует INotifyPropertyChanged .

Всякий раз, когда пользователь делает что-то, что вызывает изменение данных в вашей модели, вы будете уведомлены и сможете предпринять соответствующие действия.

Вероятно, это также сократит количество кода, необходимого для получения значений в элементах управления формы и из них.

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