2008-09-25 2 views
0

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

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

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

ответ

3

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

private void OnRadioButtonCheckedChanged(object sender, EventArgs e) 
{ 
    Control1.Visible = RadioButton1.Checked; 
    Control2.Visible = RadioButton2.Checked; 
} 
2

Ну, вы также можете использовать привязку данных ... кажется немного более элегантным для меня. Предположим, у вас есть два радиообъектива «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 нарушает функциональность, и я должен идти читать в интернете почему ..

СПУСТЯ EDIT:

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

+0

Интересно, я еще не сталкивался с привязкой данных (я до сих пор довольно новичок в разработке C#). Я должен проверить это. – 2008-10-05 07:45:00

Смежные вопросы