在不使用.Show()的情况下在表单之间发送数据

时间:2010-05-24 18:36:23

标签: c# forms refresh

假设我有两种形式。在Form1中,我有一个计时器,计数(计数++),在Form2中,我有一个文本框(textBox1),显示计时器的计数。现在我想知道如何在没有任何用户干扰(点击按钮)的情况下在'textBox1'中显示整数'count',或者换句话说,如何在文本框中自动刷新数据(不使用{{1} })。我想要2个单独的窗口,一个是运行计时器,另一个是显示计时器计数和不断更新的文本框(借助计时器,我猜)。

5 个答案:

答案 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");