不确定我是否能够清楚地表达我的问题,但让我试试:
所以我编写了一小段代码,当用户的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 ...等)是根据组合框下拉菜单中的文本(你选择的状态)更改状态的方法我已经分别测试了所有方法另外,他们工作得很漂亮,我排除了他们的问题,这是一个逻辑错误吗?
答案 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”函数来“执行突出显示的方法而不查看内部”,“调试方法的内部”或“将当前方法运行到最后然后”分别显示下一级别。
如果你这样做,你会弄清楚为什么你得到一个错误,并且更容易确定错误的来源。 (例如,如果变量设置为意外值,您将知道何时更改)。