2010-05-24 61 views
0

假设我有两种形式。在Form1中,我有一个计数器(计数++),在Form2中我有一个文本框(textBox1),它显示了计时器的计数。现在我想知道如何在没有任何用户干扰(单击按钮)的情况下在'textBox1'中显示整数'count',换句话说,我将如何使文本框中的数据自动刷新(不使用Form2 form = new Form2(); form.Show();)。我想要2个独立的窗口,一个运行计时器,另一个文本框显示定时器计数了多少,并不断更新(在定时器的帮助下,我假设)。在表单之间发送数据时不使用.Show()

回答

3

一种方法是创建一个公共事件并从另一个表单注册该事件。

0

您可以有一个单一/静态类,它包含与所有表单相关的所有数据,并将其公开为属性。所有表单都可以编写和读取这些属性。此外,它还会触发表单在属性更改时可以订阅的事件(以防您需要实时更新)。

+0

单身人士模式被视为反模式很多这些天,所以我不会推荐使用它。 – 2010-05-24 18:41:34

+1

你应该总是使用适合你的东西。 – bitbonk 2010-05-24 18:42:11

1

最简单的方法:在Form2上公开一个属性。在属性的设置器中,设置文本框的值。我相信计时器事件在UI线程上触发,所以你不应该有任何线程安全问题。如果你这样做,你将不得不回到Brian上面提到的公共事件方法。

请记住,您可能还必须执行DoEvents()以使UI实际更新为用户。另外请记住,这种更新本质上会减慢应用程序的处理速度。

public int TimerValue 
{ 

    set 
    { 
     this.txtTextBox.Text = string.Format("{0:0000}", value); 

    } 
} 
0

只要让你的计时器成为一个公共事件,以便它可以在另一个表单上引用。

0

实现定时器形式INotifyPropertyChanged,并且定义表示计数的公共属性:

private int count; 
public int Count 
{ 
    get { return count; } 
    set 
    { 
     if (count != value) 
     { 
      count = value; 
      OnPropertyChanged("Count"); 
     } 
    } 
} 

然后,文本框形式,其绑定到你的文本框的文本价值的计时器形式的Count属性。

textbox.DataBindings.Add("Text", timerForm, "Count");