Лучший способ поменять два элемента управления .NET на основе переключателей - PullRequest
0 голосов
/ 25 сентября 2008

У меня есть форма, где у меня есть две радиокнопки и два взаимозаменяемых элемента управления (состоящих из ListView и нескольких кнопок). В зависимости от того, какая радио-кнопка выбрана, я хочу отобразить правильное управление для пользователя.

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

Кажется, это работает достаточно хорошо, но мне было любопытно, есть ли лучший или более распространенный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 25 сентября 2008

Да, вот как я это делаю. Я бы установил событие CheckedChanged обеих радиокнопок так, чтобы оно указывало на один обработчик события, и поместил бы следующий код для замены видимого элемента управления.

private void OnRadioButtonCheckedChanged(object sender, EventArgs e)
{
    Control1.Visible = RadioButton1.Checked;
    Control2.Visible = RadioButton2.Checked;
}
2 голосов
/ 04 октября 2008

Ну, вы также можете использовать привязку данных ... мне кажется, это немного элегантнее. Предположим, у вас есть две радиокнопки «rbA» и «rbB» и два текстовых поля «txtA» и «txtB». И вы хотите, чтобы txtA был видимым только тогда, когда установлен флажок rbA, а txtB видимым только тогда, когда установлен флажок rbB. Вы можете сделать это так:

private void Form1_Load(object sender, EventArgs e)
{
    txtA.DataBindings.Add("Visible", rbA, "Checked");
    txtB.DataBindings.Add("Visible", rbB, "Checked");
}

Однако ... Я заметил, что использование UserControls вместо TextBoxes нарушает функциональность, и я должен прочитать в сети, почему ..

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:

Связывание данных работает в двух направлениях! : Если вы программно установите (откуда-то еще) видимость txtA в false, rbA станет неконтролируемым. В этом прелесть привязки данных.

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