繁体   English   中英

为什么在WinForm中的Visual C#.NET中,除非选择了tabPage1,否则tabPage1不会更新控件内容的更改?

[英]Why in Visual C# .NET in WinForm, tabPage1 will not update control content changes unless tabPage1 is selected?

因此,在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。

由于在我的应用程序中,我有多个选项卡,它们需要从Internet更新内容并填充标签和列表视图,因此我需要它能够更新选项卡上的内容而无需我进行选择。

在不以编程方式强制用户选择选项卡来更新内容的情况下(如果使用其他选项卡时会打扰用户),我将如何进行?

注意:我正在尝试避免使用这种笨拙的解决方案(它确实有效,但对用户而言却很烦人):

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中,一切都可以正常工作。

连同进行更改的代码,尝试调用tabPage1.Update() 也许它没有更新,因为它不可见。 无论哪种方式,当用户更改选项卡以查看其内容时,它都可能会调用上述方法并显示其内容已更新。 因此,如果它在后台,则不必真正更新它。 我无法自己测试它,因为我不再有Visual Studio了:(

看到问题中的编辑,它不起作用的原因是因为我使用了button.PerformClick()而不是正常的方法调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM