假设我有两种形式。在Form1中,我有一个计时器,计数(计数++),在Form2中,我有一个文本框(textBox1),显示计时器的计数。现在我想知道如何在没有任何用户干扰(点击按钮)的情况下在'textBox1'中显示整数'count',或者换句话说,如何在文本框中自动刷新数据(不使用{{1} })。我想要2个单独的窗口,一个是运行计时器,另一个是显示计时器计数和不断更新的文本框(借助计时器,我猜)。
答案 0 :(得分:3)
一种方法是创建一个公共事件并从另一个表单注册该事件。
答案 1 :(得分:1)
最简单的方法:在Form2上公开一个公共属性。在属性的setter中,设置文本框的值。我相信计时器事件会在UI线程上触发,因此您不应该遇到任何线程安全问题。如果你这样做,你将不得不回到Brian上面提到的公共事件方法。
请记住,您可能还需要执行DoEvents()以使UI实际更新为用户。另请注意,此类更新本身会降低应用程序的处理速度。
public int TimerValue
{
set
{
this.txtTextBox.Text = string.Format("{0:0000}", value);
}
}
答案 2 :(得分:0)
你可以拥有一个单例/静态类,它包含与所有表单相关的所有数据,作为属性公开。所有表单都可以编写和读取这些属性。此外,它会触发表单在属性更改时可以订阅的事件(如果您需要实时更新)。
答案 3 :(得分:0)
只需将您的计时器设为公共事件,以便在其他表单上引用它。
答案 4 :(得分:0)
在计时器表单上实现INotifyPropertyChanged,并定义一个表示计数的公共属性:
private int count;
public int Count
{
get { return count; }
set
{
if (count != value)
{
count = value;
OnPropertyChanged("Count");
}
}
}
然后,在文本框表单上,将文本框Text值数据绑定到计时器表单的Count属性。
textbox.DataBindings.Add("Text", timerForm, "Count");