1

C# VS2008、WinForm アプリケーションを使用しています フォーム (win-form アプリケーション) に checklistbox コントロールがあります コードでは、SetItemChecked(index, false) メソッドを使用して、checkedlistbox のいくつかの項目をチェックし、ItemCheck イベントを発生させます。また、ユーザーがそのcheckedlistboxのアイテムをチェックできるようにし、ユーザーがアイテムをチェックまたはチェック解除すると、イベントItemCheckを発生させます。ItemCheck イベントで、このイベントがどのように発生するか (コードまたはユーザーのキーボード/マウス入力を介して) を見つけるにはどうすればよいですか? ありがとう。

4

1 に答える 1

2

コードを使用して状況を区別する簡単な方法はないと思います。
頭に浮かぶ唯一のことは、グローバル フォーム変数を使用することです。

public class Form1:Form
{
    bool _isCodeClick = false;

    .....

    // Somewhere in your code
    _isCodeClick = true;
    checkedListBox1.SetItemChecked(index, true);
    _isCodeClick = false;

    ..... 


    private void CheckedListBox1_ItemCheck(Object sender, ItemCheckEventArgs e) 
    {
        if(_isCodeClick == true)
        {
            // Do processing for click by code
        }
        else
        {
            // Do processing for click by user
        }
    }
}

このソリューションを使用する場合は、グローバル変数の false 状態へのリセットをバイパスする可能性のある例外を正しくトラップするために、追加の手順を実行することを忘れないでください。

おそらく、キーボードとマウスのイベントの高度な操作を使用して、ItemCheck イベントの原因を特定する合理的な方法にたどり着くことができますが、解決策が複雑すぎて価値がない場合もあります。

編集:私の答えを見直して、この回答が意味する維持の問題を減らすために少し変更を加える必要があると感じています。
ブール変数を設定して SetItemChecked を呼び出すコードは、このように別の関数にカプセル化する必要があります。

private void SetItemCheckedFromCode(int index, bool toSet)
{
     try
     {
         _isCodeClick = true;
         checkedListBox1.SetItemChecked(index, true);
     }
     finally
     {
         _isCodeClick = false;
     }
}
于 2013-01-23T14:32:35.467 に答える