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

时间:2015-06-22 06:19:16

标签: c# winforms tabcontrol tabpage

因此,在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中都可以正常工作。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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