我有逻辑上的框OnCheckedChanged事件,火灾在形成的负载以及当用户的变化检查的状态。我想的逻辑,只有执行根据用户的行动。

有一个灵活的方式检测用户vs方案的变化,不依赖于设置检查用户变数?

有帮助吗?

解决方案

我通常有一个布尔标志我的形式,我以前编程变更值设置为true。然后,事件处理程序可以检查标志,以查看它是否是用户或编程。

其他提示

尝试一些美好的旧的反射?

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

呼叫堆是这样的:

  • set_Checked
  • OnCheckChanged

所以你需要回去3区分谁设置检查

不记得不过,有一些东西,可以混乱的呼吁叠,这不是100%可靠的,但是你可以延长这一点来搜索为起源。

我曾尝试这和它的工作。

        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");
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top