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

本文关键字:tabPage1 否则 更新 控件 选择 中的 WinForm Visual NET 为什么 | 更新日期: 2023-09-27 17:59:05

因此,在Visual C#.NET中的基本WinForm中,我有一个带有两个页面的tabControl1:tabPage1和tabPage2。

假设我在选项卡Page1中有标签1,还有一个计时器,它每10秒更新一次,并将标签1更改为当前时间:

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,那么标签1.Text更新得很好,即使我最小化了应用程序。但是,如果选择了选项卡Page2,则标签1。在我选择包含标签1的选项卡Page1之前,文本永远不会更新。

由于在我的应用程序中,我有多个选项卡,它们需要更新互联网上的内容并填充标签和列表视图,所以我需要它能够在不进行选择的情况下更新选项卡上的内容。

如果不以编程方式强制用户选择选项卡来更新内容,如果用户使用不同的选项卡,这会干扰用户,我该如何做到这一点?

注意:我正在努力避免这个包含的解决方案(它确实有效,但对用户来说非常烦人):

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时,它显示的时间和以前一样。

编辑2:我遗漏了对这个问题至关重要的信息。在timer1中,我正在执行:button1.PerformClick();但是,PerformClick();如果按钮被隐藏,将不起作用。因此,当我在tabPage2中时,它没有正确地单击按钮,因为按钮隐藏在tabPage1中。因此,解决方案是将按钮代码放入一个方法中,并使用计时器而不是PerformClick()来执行该方法,然后无论您是否在tabPage1中,一切都会正常工作。

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

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

请参阅问题中的编辑,它不起作用的原因是我使用了按钮。PerformClick()不是一个正常的方法调用。