スポンサーリンク

| キーワード:

全て未選択のラジオボタンの実装

 

こんな風にラジオボタンがある時

allunsetradio1

 

radioButton1をクリックしたら、そのチェックが消えてほしい。

allunsetradio2

 

という上司の要求にこたえるべく以下のように実装

 まずラジオボタンがクリックされる直前の状態を記憶するメンバ変数を定義。

bool checkwhendown;

 

次にマウスダウンとクリックのイベントで呼び出す関数を以下に定義。

 

void RadioMouseDown(System::Object^ sender,System::Windows::Forms::MouseEventArgs^  e){
    if (e->Button == System::Windows::Forms::MouseButtons::Left) {
        checkwhendown = dynamic_cast<RadioButton^>(sender)->Checked;
    }
}
void RadioMouseClick(System::Object^ sender,System::EventArgs^  e){
    if (dynamic_cast<System::Windows::Forms::MouseEventArgs^>(e)->Button == System::Windows::Forms::MouseButtons::Left) {
        if( checkwhendown ) dynamic_cast<RadioButton^>(sender)->Checked = false;
    }
}

 

 各ラジオボタンの各メンバ関数から上記関数を呼び出す

_MouseDownがあったときに現在のラジオボタンの状態を保存。

その後「普通の」ラジオボタンの挙動が走ってしまい、クリックされたラジオボタンにチェックが入ってしまう

そこでそのあとに飛んでくる_Clickイベントで保存していた状態を調べ、元々trueだったラジオボタンがクリックされていたら、falseをセットする

 

System::Void radioButton1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    RadioMouseDown(sender,e);
}
System::Void radioButton2_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    RadioMouseDown(sender,e);
}
System::Void radioButton3_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    RadioMouseDown(sender,e);
}
System::Void radioButton4_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    RadioMouseDown(sender,e);
}
System::Void radioButton5_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    RadioMouseDown(sender,e);
}
System::Void radioButton1_Click(System::Object^  sender, System::EventArgs^  e) {
    RadioMouseClick(sender,e);
}
System::Void radioButton2_Click(System::Object^  sender, System::EventArgs^  e) {
    RadioMouseClick(sender,e);
}
System::Void radioButton3_Click(System::Object^  sender, System::EventArgs^  e) {
    RadioMouseClick(sender,e);
}
System::Void radioButton4_Click(System::Object^  sender, System::EventArgs^  e) {
    RadioMouseClick(sender,e);
}
System::Void radioButton5_Click(System::Object^  sender, System::EventArgs^  e) {
    RadioMouseClick(sender,e);
}

 

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: