[英]access text of textbox1 in tabPage1 from tabPage2 in C# visual studio
[英]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.