3

メソッドはありますか、または(Windows フォーム)チェックボックスがオフになっている場合 (チェックされていない場合)に一連の命令を実行するメソッドを作成することは可能ですか? サンプルコードを提供して、これを明確にします。

既存のサンプル コード:

private void ChkBox_CheckedChanged(object sender, EventArgs e)
{
    if (ChkBox.Checked == false)
        {
                MessageBox.Show("unchecked");
        }
}

Q:if conditionチェックボックスがオフの場合にのみ実行されるメソッドを作成することで、これを回避できますか?

イラスト: このようなもの:

private void ChkBox_Unchecked(object sender, EventArgs e)
{
    MessageBox.Show("unchecked");
}

追加コメント:イベント「チェックボックスがチェックされています」に対して実行するものは何もありません..イベントの種類にcheckchanged置き換えることでイベントを回避できるかどうかを考えてみてくださいunchecked

4

7 に答える 7

5

その奇妙なイベントが本当に必要な場合は、CheckBox から継承してカスタム チェック ボックスを作成します。そのイベントをオーバーライドし、イベントOnCheckedChangedを追加します。Unchecked

public class StrageCheckBox : CheckBox
{
    public event EventHandler Unchecked;

    protected override void OnCheckedChanged(EventArgs e)
    {
        base.OnCheckedChanged(e);

        if (!Checked)
            OnUnchecked(e);
    }

    protected virtual void OnUnchecked(EventArgs e)
    {
        if (Unchecked != null)
            Unchecked(this, e);
    }
}

StrangeCheckBoxesデフォルトのチェック ボックスの代わりに使用します。イベントにサブスクライブしUncheckedます。出来上がり、あなたはその奇妙な行動をしています。

備考実際には、すべてのシナリオでカスタム コントロールまたは if/else を使用することはお勧めしません。この種の動作をするチェックボックスが多数ある場合、カスタム コントロールは、各ハンドラーで多数の if/else を複製するよりも優れています。複数のコントロールがある場合、またはすべてのチェックボックスに単一のハンドラーがある場合は、if/else アプローチを使用します。

于 2013-03-04T11:42:48.540 に答える
2

CheckBoxとを継承できます。override OnCheckedChanged

class ExtendedCheckBox : CheckBox
{
    public event EventHandler Unchecked;
    protected override void OnCheckedChanged(EventArgs e)
    {
        base.OnCheckedChanged(e);

        if (Checked == false)
            OnUnchecked(e);            
    }
}
于 2013-03-04T11:40:52.727 に答える
1

いいえ、公開される唯一のイベントは、状態への変更が発生したときに検出するイベントです。状態がどのように変化したかを判断するには、状態を確認する必要があります。

気が向いたら、これを本質的にラップし、そのような状態を区別するイベントを公開する独自のコントロールを作成することもできますが、これはまったく無意味に思えます。

于 2013-03-04T11:37:28.253 に答える
1

いいえ、申し訳ありません。これは、状態の変化に対してトリガーできる唯一のイベントです。あなたのコードは問題ないようです。嫌いな理由は?

于 2013-03-04T11:39:19.007 に答える
0

イベントがすべての変更で発生することがわかっている限り、選択した値を区別して個別のイベントを発生させる独自のコントロールを作成できますが、それが本当に価値があるかどうかはわかりません。

于 2013-03-04T11:39:01.307 に答える
0

これは簡単な解決策ですが、CheckBox から継承してイベントを変更するのが最善の方法です。しかし、比較的簡単な方法は次のとおりです。

が見えなくなるようにCheckBox幅を狭めます。CheckBox Labelボックスのみが表示されます。次に、ボックスと相互に排他的であるべきボックスの横に別のラベルを含めます。

次に、イベントを編集しCheckBox Clickedます。チェックボックスの状態を識別するために、ある種のフラグを使用します。出来上がり!

于 2016-01-26T06:09:41.290 に答える
0

このようなことはできないと思いますが、チェックボックスがオフの場合に実行する命令が多く、それらをifステートメントにカプセル化したくない場合checkedは、最初にチェックして返すことができます。

private void ChkBox_CheckedChanged(object sender, EventArgs e)
{
    if (ChkBox.Checked) return;

    MessageBox.Show("unchecked");
}
于 2013-03-04T11:40:20.870 に答える