如何使用parentChild中的ChildForm数据和组件。窗口形式MDI

时间:2014-04-04 20:06:12

标签: c# winforms oop mdichild mdiparent

我有一个带有表单MDIContainer(form1)的项目,这个form1有4个子表单(form2,form3,form4,form5)。

所有数据都需要连接,我的意思是,我需要创建每个表单的一个对象,不要丢失该对象的数据

在form1中,我声明所有形式如:form2 frm_2 = new form2 ...

form2,form3,form4,form5有DataGridViews,bindingsources等......

有时我需要在表单之间操作数据。

例如:如何通过子表单传递数据?但是这些数据必须始终存在

实施例:。当在form2上的事件DataGridView2_SelectionChanged我需要从数据库中获取一些数据并在form3上放入form3 DataGridView3.But我在DataGridView3上有一个方法和bindingsource以及数据集绑定。所以我需要访问这个方法。

我需要一个例子,如何做到这一点,许多子表单以及如何在所有表单之间进行通信

2 个答案:

答案 0 :(得分:1)

已经多次询问 并收到足够的答案来帮助您。

(这就是为什么你从某人那里得到了一个downvote。在你提出任何要求之前,你应该做一个正确的搜索!)

使用您描述的设置,您可以这样:将主表单的引用传递给构造函数中的每个子表单。保留此引用并使用它来访问主窗体和通过其许多窗体处理所有其他子窗体。

Form23 form23 = new Form23(this);
form23.Show();

在Form23 ..:

// a class variable:
public Form1 form1;

public Form23(Form1 form1_);
{
    InitializeComponent();
    form1 = form1_;
}

现在您可以使用form1作为集线器并像这样引用每个兄弟:

form1.form22.somePublicDataFieldOrWhatever...

答案 1 :(得分:1)

感谢您的回答  这就是我现在正在做的事情:
 在主要表格中:

public partial class Form1 : Form
{
 public Form2 form2;
    public Form3 form3;
    public Form4 form4;
    public Form5 form5;

    public Form1()
    {
        InitializeComponent();

         form2 = new Form2(this);

         form3 = new Form3(this);

         form4 = new Form4(this);

         form5 = new Form5(this);
    }
   private void Form1_Load(object sender, EventArgs e)
    {


        form2.MdiParent = this;
        form3.MdiParent = this;
        form4.MdiParent = this;
        form5.MdiParent = this;
        form2.Show();
        form3.Show();
        form4.Show();
        form5.Show();
}
}

然后每个子表单都有一个对main的引用,就像@Taw说的那样:

public partial class Form2 : Form
{
    public Form1 form_1;

    public Form2(Form1 form1)
    {
        InitializeComponent();
        form_1 = form1;
    }
}

现在我可以这样做:

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
       if(dataGridView1.Rows.Count> 1)
        form_1.form2.UpdateDataGrid(Convert.ToInt16(dataGridView1.SelectedRows[0].Cells[0].Value));
    }

也许它可以帮助某人...... 如果有人知道更好的方法,请分享。

很抱歉,如果这是重复的问题,但在我的研究中,我没有看到类似的东西。也许我还没有充分研究过。 =]

感谢@TaW的考虑