1

フォームの読み込み時とユーザーがチェック状態を変更したときに発生する CheckBox の OnCheckedChanged イベントにロジックがあります。ユーザーのアクション時にのみロジックを実行したい。

ユーザー変数の設定/チェックに依存しない、ユーザー対プログラムによる変更を検出する巧妙な方法はありますか?

4

3 に答える 3

0

私は通常、プログラムで値を変更する前に true に設定した bool フラグをフォームに持っています。その後、イベント ハンドラーはそのフラグをチェックして、それがユーザーまたはプログラムによるものかどうかを確認できます。

于 2010-05-10T21:45:55.297 に答える
0

古き良き反射を試してみませんか?

StackFrame lastCall = new StackFrame(3);
if (lastCall.GetMethod().Name != "OnClick")
{
    // Programmatic Code
}
else
{
    // User Code
}

コール スタックは次のようになります。

  • オンクリック
  • set_Checked
  • OnCheckChanged

そのため、SET チェックを行ったユーザーを区別するには、3 に戻る必要があります。

ただし、呼び出しスタックを台無しにする可能性のあるものがあることを覚えておいてください。100% 信頼できるわけではありませんが、元のソースを検索するためにこれを少し拡張できます。

于 2010-05-10T21:42:30.627 に答える
0

私はこれを試してみましたが、うまくいきました。

        bool user_action = false;
        StackTrace stackTrace = new StackTrace();
        StackFrame[] stackFrames = stackTrace.GetFrames();
        foreach (StackFrame stackFrame in stackFrames)
        {
            if(stackFrame.GetMethod().Name == "WmMouseDown")
            {
                user_action = true;
                break;
            }
        }

        if (user_action)
        {
            MessageBox.Show("User");
        }
        else
        {
            MessageBox.Show("Code");
        }
于 2010-11-16T14:41:56.083 に答える