J'ai quelques radionButtons dans groupBox et je dois agir comme ce que je pourrais appeler "un des radiobuttons.checked changé" ou savoir à partir du radiobutton quel index est modifié. J'ai essayé de le trouver dans la liste des événements, mais je ne trouvais pas le bon.
Edit: Pour que ce soit plus clair: je dois savoir s’il existe un handel pour ce que j’écrirai comme méthode de traitement pour goupBox et non pour single radioButton. Je sais comment utiliser radiButton.checkedChanged, mais ce n'est pas ce que je découvre. groupBox. Je trouve gestionnaire "dans la zone de groupe est quelque chose qui se passe" ou similaire s'il en existe.
C’est dans WFA (Application de présentation Windows) dans Visual studio 2012.
Je pense que ce que vous voulez faire est de relier tous les événements CheckedChanged des boutons Radio au même gestionnaire.
public Form1()
{
radioButton1.CheckedChanged += new EventHandler(radioButtons_CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(radioButtons_CheckedChanged);
// ...
}
private void radioButtons_CheckedChanged (object sender, EventArgs e)
{
RadioButton radioButton = sender as RadioButton;
if (radioButton1.Checked)
{
// Do stuff
}
else if (radioButton2.Checked)
{
// Do other stuff
}
}
Rien n'est prévu pour ça autant que je sache.
Définissez la propriété tag sur une sorte d'indicateur (0 à n).
Ajouter un CheckChangedHandler
Pointez tous les boutons CheckChanged sur les événements.
alors quelque chose comme.
private void radioButtons_CheckedChanged (object sender, EventArgs e)
{
RadioButton radioButton = sender as RadioButton;
int buttonid = (int)radioButton.Tag;
switch (buttonid)
{
case 0 : // do something; break
}
}
Si vous en avez quelques-unes, je regarderais un composant de radiogroupe.
J'ai eu le même problème: une boîte nommée Type de bouton (gbxButtonType) avec 6 boutons radio et une autre boîte nommée Type d'icône (gbxIconType) avec 8 bouton radio. Lorsque l'utilisateur sélectionne un bouton radio dans chaque zone de groupe, un MessageBox apparaît avec la sélection appliquée après avoir cliqué sur DisplayButton . Mon problème était que les zones de groupe n'avaient pas d'événement CheckedChanged. La solution de AKN a parfaitement fonctionné:
public Form1()
{
InitializeComponent();
for (int i = 0; i < gbxButtonType.Controls.Count; i++)
{
RadioButton rdb = (RadioButton)gbxButtonType.Controls[i];
rdb.CheckedChanged += new System.EventHandler(gbxButtonType_CheckedChanged);
}
for (int i = 0; i < gbxIconType.Controls.Count; i++)
{
RadioButton rdb = (RadioButton)gbxIconType.Controls[i];
rdb.CheckedChanged += new System.EventHandler(gbxIconType_CheckedChanged);
}
}
private void gbxIconType_CheckedChanged(object sender, EventArgs e)
{
if (sender == rdbAsterisk)
{
iconType = MessageBoxIcon.Asterisk;
}
else if (sender == rdbError)
{
iconType = MessageBoxIcon.Error;
}
...
else
{
iconType = MessageBoxIcon.Warning;
}
}
Semblable à la réponse de davenewza (et aurait probablement dû être un commentaire, mais ma réputation est insuffisante), mais l'événement n'a été déclenché qu'une seule fois pour tout le groupe de boutons radio.
public Form1()
{
// Add a "CheckedChanged" event handler for each radio button.
// Ensure that all radio buttons are in the same groupbox control.
radioButton1.CheckedChanged += new EventHandler(radioButtons_CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(radioButtons_CheckedChanged);
}
private void radioButtons_CheckedChanged (object sender, EventArgs e)
{
// Do stuff only if the radio button is checked (or the action will run twice).
if (((RadioButton)sender).Checked)
{
if (((RadioButton)sender) == radioButton1)
{
// Do stuff
}
else if (((RadioButton)sender) == radioButton2)
{
// Do other stuff
}
}
}
// Ici vous allez avec la permission de Jock Frank Halliday
//^subscribe events to radio button check changed
private void seriesTxtBxEvent()
{
//Show txtBx
this.radBtn_RoomSeries.CheckedChanged += new EventHandler(showSeriesTxtBx_Event);
//Hide txtBx
this.radBtn_RoomNumber.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event);
this.radBtn_RoomName.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event);
this.radBtn_RoomLevel.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event);
this.radBtn_RoomDep.CheckedChanged += new EventHandler(hideSeriesTxtBx_Event);
}
private void hideSeriesTxtBx_Event(object sender, EventArgs e)
{
tbx_SheetSeries.Visible = false;
}
private void showSeriesTxtBx_Event(object sender, EventArgs e)
{
tbx_SheetSeries.Visible = true;
}
Je pense que vous souhaitez gérer la sélection de certains boutons radio dans une groupbox à l'aide du contrôle de groupbox lui-même .
Peut-être que vous vouliez essentiellement éviter la répétition de code.
(c'est-à-dire) l'ajout d'un événement de vérification de changement pour tous les boutons radio du concepteur, ce qui peut s'avérer fastidieux lorsqu'il y a plus de contrôle. Comme il est déjà présent dans un groupe, pourquoi ne pas utiliser l'objet de contrôle de groupe en elle et définir les événements.
C'est ainsi que j'ai compris votre problème et par conséquent la solution indiquée ci-dessous.
Définir un gestionnaire commun pour tous les contrôles de bouton radio dans la zone de groupe
for (int i = 0; i < groupBox.Controls.Count; i++)
{
RadioButton rb = (RadioButton)groupBox.Controls[i];
rb.CheckedChanged += new System.EventHandler(evntHandler);
}
Dans le gestionnaire, vous pouvez déterminer quel bouton a été modifié comme indiqué par d'autres et effectuer les actions nécessaires.
System.Windows.Forms.RadioButton.CheckedChanged
est l'événement dont vous avez besoin
Alors fais quelque chose comme:
public Form1()
{
InitializeComponent();
this.radioButton1.CheckedChanged += new EventHandler(radioButton1_CheckedChanged);
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
// your action
}
Vous pouvez peut-être le faire avec Timer, mais c'est mauvais pour l'optimisation, la solution facile est que pour chaque bouton radio, vous ajoutez simplement une seule fonction en tant qu'événement ONCheckedChanged.
Groupbox limitera un seul bouton radio coché
So Setp1: vous pouvez assigner un gestionnaire d’événements "CheckedChanged" à tous
private void initRadio()
{
radio_button1.CheckedChanged += Radio_show_CheckedChanged;
radio_button2.CheckedChanged +=Radio_show_CheckedChanged;
}
Et Setp2: implémente ce gestionnaire d'événements comme ceci (Filtrer par le texte du bouton radio)
private void Radio_show_CheckedChanged(object sender, EventArgs e)
{
RadioButton radioButton = sender as RadioButton;
if (radioButton.Checked == true) { //limited only checked button do function
switch (radioButton.Text)
{
case "name1":
// do your stuff ...
break;
case "name2":
// do your stuff ...
break;
}
}
}
//Form Start
void MainFormLoad(object sender, EventArgs e)
{
Control.ControlCollection locais = groupBoxLocalização.Controls;
foreach (CheckBox chkBox in locais)
{
chkBox.MouseUp += chkBoxLocais_MouseUp;
}
}
// Event
void chkBoxLocais_MouseUp(object sender, MouseEventArgs e)
{
//Tratar individualmente
CheckBox chk = (CheckBox)sender;
//ou para tratar todos objetos de uma vez
Control.ControlCollection locais = groupBoxLocalização.Controls;
foreach (CheckBox chkBox in locais) {
//chkBox....
}
}