【发布时间】:2013-01-10 00:46:34
【问题描述】:
为什么我第一次尝试更改此代码中的按钮文本不有效,而第三次尝试却有效?
串行端口连接时,我的用户将不得不等待几秒钟。之后,我想提醒他他已经连接(第二次尝试可能会导致问题)。
我想让他知道一切都很好,这样他就不会想“duh”并点击两次。
失败。文本更改永远不会出现。
好的,为什么按钮文本的第三个更改有效,但第一个无效?我不知道第二个是否有效。
/***********************************************************************
* Button: Connect Port *
***********************************************************************/
private void TheConnectPortButton_Click(object sender, EventArgs e)
{
string OldText = TheConnectPortButton.Text;
TheConnectPortButton.Text = "Busy, Please Wait"; /////// This never happens
ButtonBoss.ButtonHandler_ConnectPort();
TheConnectPortButton.Text = OldText; /////// Not sure if this happens
if (aUartSemaphoreThatTells.IfWeHaveConnectedToAPort == (int)aValueWhichIndicatesThat.YesWeHaveAGoodPortConnected)
{
TheConnectPortButton.Text = "Connected"; /////// This one does happen
}
}
aUartSemaphoreThatTells.IfWeHaveConnectedToAPort 也被 ButtonBoss 例程使用,以确保他不会再次连接,以及其他按钮例程(例如,确保我们在 Tx/Rx 之前连接或其他)。
我尝试在例程返回后更改代码,使其看起来像这样......
if (aUartSemaphoreThatTells.IfWeHaveConnectedToAPort == (int)aValueWhichIndicatesThat.YesWeHaveAGoodPortConnected)
{
TheConnectPortButton.Text = "Connected";
}
else
{
TheConnectPortButton.Text = OldText;
}
...我仍然得到相同的结果。
我的猜测(仅此而已)是线程以某种方式参与了所有这一切,并且串行端口例程通过一些我目前没有正确遵循的卷积来胜过按钮文本更改例程。
问题:我需要做什么才能在连接内容占用系统之前更改文本?
(如果是这样的话)
问题 2:如果我不能做到这一点,我想我已经阅读过有关“灰显”按钮的信息,或者,我相信我在某个地方看到了我实际上可以让按钮在用户眼前消失这样他就不能再点击了。欢迎提供示例代码的链接。
【问题讨论】:
-
你更新你的屏幕了吗?变灰 button.enabled = false,隐藏 button.hide,通过 google 查看 msdn
-
不,我不更新我的屏幕。我要去看看那是什么意思。喜欢的话给我个链接,我会关注的。
-
这是 WinForms、WebForms、WPF 吗?
-
从msdn.microsoft.com/en-us/library/…开始,从那里开始
-
非常基础的 UI 代码,任何关于它的书都很好地涵盖了。快速修复,每个人都喜欢快速修复而不是读书,是 TheConnectPortButton.Update()。