【发布时间】:2015-09-07 12:07:47
【问题描述】:
所以在 Visual C# .NET 的基本 WinForm 中,我有 tabControl1 和两个页面:tabPage1 和 tabPage2。
假设我在 tabPage1 中有 label1,还有一个每 10 秒更新一次并将 label1 更改为当前时间的计时器:
private void timer1_Tick(object sender, EventArgs e)
{
button1.PerformClick();
}
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Last updated: " + DateTime.Now.ToString() + "(local time)";
}
现在,如果我选择了 tabPage1,label1.Text 会更新得很好,即使我已经最小化了应用程序。但是,如果选择了 tabPage2,则 label1.Text 永远不会更新,直到我选择包含 label1 的 tabPage1。
由于在我的应用程序中我有多个选项卡,需要从互联网更新内容并填充标签和列表视图,我需要它能够在不选择的情况下更新选项卡上的内容。
如果不以编程方式强制用户选择选项卡来更新内容,如果他们使用不同的选项卡会打扰用户,我将如何执行此操作?
注意:我试图避免这种笨拙的解决方案(它确实有效,但对用户来说很烦人):
private void timer1_Tick(object sender, EventArgs e)
{
int x = tabControl1.SelectedIndex;
if (tabControl1.SelectedIndex != 0)
{
tabControl1.SelectedIndex = 0;
label1.Text = "Last updated: " + DateTime.Now.ToString() + "(local time)";
tabControl1.SelectedIndex = x;
}
}
编辑:我试过 tabPage1.Update();它不起作用,仍然没有更新时间,所以当我选择 tabPage1 后它应该更新了几次后,它显示的时间和以前一样。
Edit2:我遗漏了对问题至关重要的信息。在 timer1 我正在做: button1.PerformClick();但是,PerformClick();如果按钮被隐藏,将不起作用。因此,当我在 tabPage2 中时,它没有正确单击按钮,因为该按钮隐藏在 tabPage1 中。所以解决方法是把按钮代码,放到一个方法中,而不是用定时器来做方法,而不是PerformClick(),那么不管你是不是在tabPage1,都可以正常工作。
【问题讨论】:
标签: c# winforms tabcontrol tabpage