Marc-IT Ответов: 4

В C# как очистить компонента RadioButton, когда вкладка изменения в элемент управления TabControl


Привет У меня есть приложение winforms в c# witch имеет tabControl с 3 страницами, каждая страница имеет 4 радиокнопки. Проблема в том, что когда я перехожу на другую вкладку и нажимаю кнопку RadioButton, она становится проверенной, но RadioButton на предыдущей странице также остается проверенным.

Существует ли какой-либо способ группировать все радиокнопки на всех страницах вместе, чтобы в любой момент времени проверялась только одна радиокнопка?

Я пытался ниже код, но получаю сообщение об ошибке селектина компонент RadioButton.
<pre lang="c#">Вы не можете привязать объект типа 'System.Окна.Формы.Метка' для типа 'System.Окна.Формы.RadioButton'.</pre>

Что я уже пробовал:

private void UncheckLayouts(TabPage activePage)
       {
           foreach (Control control in tabControl1.Controls)
           {
               if (control is RadioButton)
               {
                   RadioButton rb = control as RadioButton;
                   rb.Checked = false;
               }
           }
       }
       private void radioButton1_Click(object sender, EventArgs e)
       {
           UncheckLayouts(tabControl1.SelectedTab);
       }

       private void radioButton2_Click(object sender, EventArgs e)
       {
           UncheckLayouts(tabControl1.SelectedTab);
       }



Я не получаю никаких ошибок, но могу переключать вкладки, и радиокнопки остаются выбранными

Philippe Mori

Это плохой дизайн пользовательского интерфейса. Вы всегда должны видеть все связанные переключатели сразу.

И нет ничего сложного в том, чтобы снять переключатель, так как вам просто нужно установить его Checked собственность на false.

4 Ответов

Рейтинг:
32

Ehsan Sajjad

Каждый элемент управления внутри страницы вкладки не будет типа radiobutton, вам нужно сначала проверить, является ли он переключателем, а затем привести его и изменить его состояние :

foreach (Control control in tabPage.Controls)
{
   if(control is RadioButton)
   {
       RadioButton rb =  control as RadioButton;  
       rb.Checked = false;
   }
}


другое решение состоит в том, чтобы отфильтровать экземпляры типа RadioButton из коллекции элементов управления, например:

foreach (RadioButton rb in tabPage.Controls.OfType<RadioButton>())
{  
   rb.Checked = false;
}


Marc-IT

Привет,
Спасибо за советы.
Теперь я не получаю никаких ошибок, но radiobutton остается выбранным при переходе на другую вкладку :\

Ehsan Sajjad

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

Marc-IT

Извините, я новичок в этом деле.
Что я сделал, так это добавил элемент управления tab в форму и переключатели deveral на каждой странице tabControl.
Не могли бы вы помочь, пожалуйста?

Рейтинг:
1

Ramza360

Для того, чтобы снять переключатель, при переключении вкладок, вы будете нуждаться, чтобы запустить цикл foreach код в событие элемента управления TabControl по снятии.

Нижеприведенное эффективно снимает все переключатели на странице вкладки, на которую вы нажали.

private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) {
    foreach (var ctrl in e.TabPage.Controls) {
         if (ctrl is RadioButton) {
             RadioButton tb = ctrl as RadioButton;
             rb.Checked = false;
         }
    }
}


Marc-IT

Спасибо за помощь,
Однако с моим приложением должна быть еще одна проблема.
Он по-прежнему ничего не делает, radiobutton остается выбранным, даже когда я меняю вкладку :\
То, что я сделал, - это просто поместил 4 радиокнопки на каждую из 3 страниц с дизайнером.
я что-то упустил?

Ramza360

Привет Марк вам нужно подписаться на событие отмены выбора на TabControl.
Щелкните правой кнопкой мыши элемент управления TabControl и выберите пункт Свойства. В сетке свойств щелкните значок thunderbolt, который покажет вам события. Найдите событие отмены выбора и введите имя нужного метода. Скопируйте/вставьте код в этот метод (только скопируйте цикл foreach в новый метод)

Рейтинг:
0

#realJSOP

Я бы, вероятно, добавил событие "Clicked" ко всем переключателям и настроил обработчик на использование одного и того же метода. В этот момент вы можете определить, что происходит, основываясь на том, какая кнопка была нажата. Если вы хотите, чтобы все переключатели в данной группе были сняты, вам может потребоваться установить для их свойства TabStop значение false.


Marc-IT

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

Рейтинг:
0

saumyabrata

частная tabList_Deselecting недействительным(объект отправителя, KryptonPageCancelEventArgs е)
{
по каждому элементу (ВАР CTRL в электронной.Товар.Управления)
{
if (ctrl-это ComponentFactory.Криптон.Набор инструментов.Криптонрадиобуттон)
{
ComponentFactory.Криптон.Набор инструментов.KryptonRadioButton rb = ctrl как ComponentFactory.Криптон.Набор инструментов.Криптонрадиобуттон;
РБ.Проверено = ложь;
}
}
}


Richard MacCutchan

Причина моего голосования 1: это не имеет никакого отношения к данному вопросу.