GroupBoxにいくつかのradionButtonsがあり、 "radiobuttons.checked changed"の1つと呼ぶアクションを実行するか、radiobuttonから変更されたインデックスを確認する必要があります。イベントのリストで見つけようとしましたが、適切なものを見つけることができませんでした。
編集:より明確にするために:単一のradioButtonではなく、goupBoxのハンドラーメソッドを記述するためのハンデルが存在するかどうかを知る必要があります。私はradiButton.checkedChangedの使用方法を知っていますが、それが私が見つけているものではありません。 「グループボックス内で何かが発生する」または存在する場合は同様のハンドラーを見つけています。
Visual Studio 2012のWFA(Windows Presentation Application)にあります。
あなたがしたいことは、RadioButtonsのすべてのCheckedChangedイベントを同じハンドラーに結び付けることだと思います。
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
}
}
私が知る限り、そのために組み込まれたものはありません。
Tagプロパティをある種のインジケーター(0からn)に設定することで実行できます。
CheckChangedHandlerを追加する
すべてのボタンCheckChangedイベントをそれに向けます。
その後のようなもの。
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
}
}
これらがいくつかある場合は、radiogroupコンポーネントを調べます。
同じ問題がありました:Button Type((gbxButtonType)という名前のグループボックスに6つのラジオボタンとアイコンタイプ(gbxIconType) 8個のラジオボタン。ユーザーが各グループボックスから1つのラジオボタンを選択すると、DisplayButtonをクリックした後に選択が適用された状態でMessageBoxが表示されます。私の問題は、グループボックスにCheckedChangedイベントがないことでした。 AKNのソリューションは完全に機能しました。
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;
}
}
Davenewzaの回答と似ています(コメントであるはずですが、評判は不十分です)が、ラジオボタンのグループ全体に対してイベントが1回だけ発生します。
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
}
}
}
Groupboxはチェックされた1つのラジオボタンのみを制限します
したがって、Setp1:ラジオボタンすべてに「CheckedChanged」イベントハンドラを1つ割り当てることができます。
private void initRadio()
{
radio_button1.CheckedChanged += Radio_show_CheckedChanged;
radio_button2.CheckedChanged +=Radio_show_CheckedChanged;
}
そしてSetp2:このようにこのイベントハンドラを実装します(ラジオボタンのテキストでフィルタ)
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;
}
}
}
//ジョックフランクハリデーのご厚意により
//^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;
}
私はあなたがグループボックス内のいくつかのラジオボタンの選択を扱いたいと思いますグループボックスコントロール自体を使用して。
基本的にコードの繰り返しを避けるためにこれが欲しかったのかもしれません。
(つまり)デザイナーのすべてのラジオボタンにチェック変更イベントを追加します。グループの下に既に存在するので、グループコントロールオブジェクトを使用して、その中でコントロールを操作し、イベントを設定してみませんか。
これが私があなたの問題を理解した方法であり、したがって以下に示す解決策です。
グループボックス内のすべてのラジオボタンコントロールに共通のハンドラーを設定する
for (int i = 0; i < groupBox.Controls.Count; i++)
{
RadioButton rb = (RadioButton)groupBox.Controls[i];
rb.CheckedChanged += new System.EventHandler(evntHandler);
}
ハンドラー内で、他のユーザーが示すように変更されたボタンを特定し、必要なアクションを実行できます。
System.Windows.Forms.RadioButton.CheckedChanged
あなたが必要とするイベントです
だから次のようなことをしてください:
public Form1()
{
InitializeComponent();
this.radioButton1.CheckedChanged += new EventHandler(radioButton1_CheckedChanged);
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
// your action
}
タイマーでそれを行うこともできますが、それは最適化には良くありません。簡単な解決策は、すべてのラジオボタンに対して、CheckedChangedイベントとして関数を1つだけ追加することです。
//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....
}
}