Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不使用.Show()在表单之间发送数据_C#_Forms_Refresh - Fatal编程技术网

C# 不使用.Show()在表单之间发送数据

C# 不使用.Show()在表单之间发送数据,c#,forms,refresh,C#,Forms,Refresh,假设我有两张表格。在表格1中我有一个计时器,它计数(count++),在表格2中我有一个文本框(textBox1),它显示计时器计数的多少。现在我想知道如何在没有任何用户干扰(单击按钮)的情况下在“textBox1”中显示整数“count”,或者换句话说,如何使文本框中的数据自动刷新(不使用Form2 form=new Form2();form.show();)。我想要两个独立的窗口,一个是正在运行的计时器,另一个是显示计时器计数和不断更新的文本框(我想是在计时器的帮助下).一种方法是创建一个公

假设我有两张表格。在表格1中我有一个计时器,它计数(count++),在表格2中我有一个文本框(textBox1),它显示计时器计数的多少。现在我想知道如何在没有任何用户干扰(单击按钮)的情况下在“textBox1”中显示整数“count”,或者换句话说,如何使文本框中的数据自动刷新(不使用
Form2 form=new Form2();form.show();
)。我想要两个独立的窗口,一个是正在运行的计时器,另一个是显示计时器计数和不断更新的文本框(我想是在计时器的帮助下).

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

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

您可以拥有一个单例/静态类,该类保存与所有窗体相关的所有数据,并作为属性公开。所有窗体都可以写入和读取这些属性。此外,当属性更改时(如果需要实时更新),它会触发表单可以订阅的事件。

您可以拥有一个单例/静态类,该类保存与所有表单相关的所有数据,并作为属性公开。所有窗体都可以写入和读取这些属性。此外,当属性更改时,它会触发表单可以订阅的事件(以防需要实时更新)。

最简单的方法:在Form2上公开公共属性。在属性的setter中,设置textbox的值。我相信计时器事件会在UI线程上触发,因此您不应该有任何线程安全问题。如果你这样做了,你将不得不回到布赖恩上面提到的公共事件方法

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

public int TimerValue 
{

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

    }
}

最简单的方法:在Form2上公开公共属性。在属性的setter中,设置textbox的值。我相信计时器事件会在UI线程上触发,因此您不应该有任何线程安全问题。如果你这样做了,你将不得不回到布赖恩上面提到的公共事件方法

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

public int TimerValue 
{

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

    }
}

将计时器设置为公共事件,以便在其他窗体上引用。

将计时器设置为公共事件,以便在其他窗体上引用。

在计时器窗体上实现,并定义表示计数的公共属性:

private int count;
public int Count
{
    get { return count; }
    set
    {
        if (count != value)
        {
            count = value;
            OnPropertyChanged("Count");
        }
    }
}
然后,在textbox窗体上,将textbox文本值数据绑定到计时器窗体的Count属性

textbox.DataBindings.Add("Text", timerForm, "Count");
在计时器窗体上实现,并定义表示计数的公共属性:

private int count;
public int Count
{
    get { return count; }
    set
    {
        if (count != value)
        {
            count = value;
            OnPropertyChanged("Count");
        }
    }
}
然后,在textbox窗体上,将textbox文本值数据绑定到计时器窗体的Count属性

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

现在很多人认为单例模式是反模式,所以我不建议使用它。现在很多人认为单例模式是反模式,所以我不建议使用它。