在C#中的两个Windows窗体之间发送信息

时间:2010-02-09 07:44:39

标签: c# .net variables object

这可能是一个新手问题。 :)。请考虑以下情况。

  
      
  • 假设我们有两个已经“加载”的窗口形式(即你们   可以看到两种形式)
  •   
  • 表单1包含文本框和表单2中的“提交”按钮   包含文字标签。
  •   
  • 用户可以在文本框中输入字符串,然后按提交   表格1表格2上的标签应该是   用新文本更新。
  •   

实现这一目标的最佳方法是什么?有没有正式的方法呢?我不想不必要地增加变量范围。

编辑:两个表单都属于同一个应用程序

3 个答案:

答案 0 :(得分:3)

假设这些表单是同一个应用程序的一部分,您需要有一个通用数据模型,您可以在其中保存数据,然后您的表单“绑定”到此数据模型。查看M-V-CM-V-VM模式。这也可以很好地将您的UI与数据分开。

答案 1 :(得分:1)

对winforms中的模型视图控制器模式和数据绑定进行一些研究。

创建一个单独的控制器类,并以两种形式引用它,实现INotifyPropertyChanged。在控制器上,有一个属性可以将更改的事件传播到表单。

答案 2 :(得分:-1)

Form1触发Form2打开。 Form2重载了构造函数,它将调用form作为参数,并提供对Form2成员的引用。这解决了通信问题。例如,我在Form1中将Label Property公开为public,并在Form2中进行了修改。

通过这种方法,您可以以不同的方式进行沟通。

<强> Download Link for Sample Project

// 您的Form1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }

    public string LabelText
    {
        get { return Lbl.Text; }
        set { Lbl.Text = value; }
    }
}

// 您的Form2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private Form1 mainForm = null;
    public Form2(Form callingForm)
    {
        mainForm = callingForm as Form1; 
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.mainForm.LabelText = txtMessage.Text;
    }
}

alt text http://ruchitsurati.net/files/frm1.png

alt text http://ruchitsurati.net/files/frm2.png