事件没有正确连接

时间:2010-10-13 20:31:02

标签: c# .net winforms events

不确定我是否能够清楚地表达我的问题,但让我试试:

所以我编写了一小段代码,当用户的PC被锁定时,用户可以选择为他的Office Communicator选择所需的状态(默认情况下,它会自动处于“远离”的状态)。所以在这里是Windows窗体,它基本上是一个组合框和一个按钮。组合有四个选项“离开”,“忙”,“请勿打扰”和“在线”。一切似乎都很好,程序编译好。菜单出现,你选择你想要的状态,按下按钮,然后锁定你的电脑 - 到目前为止一切都很完美。你的状态是选中的。现在出现了问题。你解锁你的电脑并尝试选择不同的状态,相同的动作,但是当你锁定PC它仍然显示以前选择的状态是Button_Click方法

public void Btn_Click(Object sender, EventArgs e)
{
    // When the button is clicked,
    // change the button text, and disable it.     
    if (Comb.Text == "Away")
    {    
        MessageBox.Show("Saved ! \nYour Status will be 'Away' ");
        Method2();
    }

    else if (Comb.Text == "Busy")
    {       
        MessageBox.Show("Saved ! \nYour Status will be  'Busy' ");
        Method1();    
    }

    else if (Comb.Text == "Do Not Disturb")
    {
        MessageBox.Show("Saved ! \nYour Status will be 'Do Not Disturb' ");
        Method3();
    }

    else
    {   
        MessageBox.Show("Saved ! \nYour Status will be 'Online' ");
        Method4();
    }

    But.Enabled = true;
    // Display the greeting label text.
}

所以4个方法(Method1(),2 ...等)是根据组合框下拉菜单中的文本(你选择的状态)更改状态的方法我已经分别测试了所有方法另外,他们工作得很漂亮,我排除了他们的问题,这是一个逻辑错误吗?

2 个答案:

答案 0 :(得分:0)

static void SystemEvents_SessionSwitch1(object sender, SessionSwitchEventArgs e)
{
    if (e.Reason == SessionSwitchReason.SessionLock)
    {
        System.Threading.Thread.Sleep(500);
        CommunicatorAPI.MessengerClass comm = new CommunicatorAPI.MessengerClass();

        if (comm.MyStatus==MISTATUS.MISTATUS_AWAY)
        {
            SetMyPresence1 ();
        } else if (e.Reason == SessionSwitchReason.SessionUnlock)
        {
            ChangeStatus1 ();
        }
    }
}

答案 1 :(得分:0)

尼古拉,试试SharpDevelop's debugger。在代码的边距中单击行if (Comb.Text == "Away")旁边的一次,然后将鼠标悬停在变量名称上,以查看每次运行时它们的设置。您可以使用“Step over”“Step into”和“Step out”函数来“执行突出显示的方法而不查看内部”,“调试方法的内部”或“将当前方法运行到最后然后”分别显示下一级别。

如果你这样做,你会弄清楚为什么你得到一个错误,并且更容易确定错误的来源。 (例如,如果变量设置为意外值,您将知道何时更改)。