2009-09-03 71 views
23

RadioButtonまたはCheckBoxの状態が変更される前にその状態をキャンセルする方法はありますか?RadioButtonまたはCheckBoxチェックの変更をキャンセルする方法

私は、CheckedChangingやBeforeCheckedChangeのような単純なイベントを期待していました。

私は本当にマウスのクリックやキーの押下を聞きたくありません。しかし、マウスクリックやキープレスを使用した実績のある信頼できる方法が分かっている場合は、説明してください。

標準のWinformsコントロールで.NET 2.0を使用しています。

答えて

35

AutoCheckをfalseに設定します。

オーバーライドのOnClickマニュアルにあるチェックボックス

+1

私はAutoCheckが存在することを知りませんでした。これはまさに私が欲しいものです、ありがとうございます。 –

+0

これは、 'Checked'イベントの変更を取り消したい場合に、' e.Cancel = true; 'を設定できるイベント引数を持つ 'CheckedChanging'イベントのようなものを、プロパティ。 – roncli

+2

ラジオボタンの場合doc: 'AutoCheckプロパティがfalseに設定されていると、RadioButtonコントロールのグループは相互に排他的なグループとして機能せず、Checkedプロパティをコードで更新する必要があります。 ' – oleksa

17

コードのデモの自動チェックをチェックし、イベントをクリックする確認プロンプトを追加します。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.checkBox1.AutoCheck = false; 
     this.checkBox1.Click += new System.EventHandler(this.checkBox1_Click); 
    } 

    private void checkBox1_Click(object sender, EventArgs e) 
    { 
     CheckBox checkBox = (CheckBox)sender; 
     if (!checkBox.Checked) 
     { 
      DialogResult dialogResult = MessageBox.Show(
       "Are you sure?", "my caption", 
       MessageBoxButtons.YesNo); 

      if (dialogResult == DialogResult.Yes) 
      { 
       checkBox.Checked = true; 
      } 
     } 
     else 
     { 
      checkBox.Checked = false; 
     } 
    } 
} 
+1

コントロールにフォーカスがあるときにスペースバーが押されていますか? – cjbarth

+0

私がこの質問をする人であれば、私は確かにこれを答えとして受け入れるでしょう – swdev

1

私は、ラジオボタン、チェックをキャンセルするために、これを使用していました。

private void radioButton1_MouseClick(object sender, MouseEventArgs e) 
    { 
     RadioButton r = (RadioButton)sender; 
     r.Checked = !(r.Checked); 
    } 
+1

このアプローチで唯一の問題は、以前のラジオボタンが既にチェックされていないことです。そのため、各ラジオボタンのCheckedChangedイベントのイベントハンドラを追加する必要がありました。ラジオボタンがオフの場合は、再度チェックしてクリックを完全に元に戻す必要がある場合は、チェックしなかったボタンを保存します。 –

関連する問題