如何使用来自父子项的子窗体数据和组件.?窗口窗体 MDI

本文关键字:窗体 数据 组件 MDI 窗口 何使用 父子 | 更新日期: 2023-09-27 17:56:37

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

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

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

form2,form3,form4,form5 具有 DataGridViews、bindingsources 等。

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

例如:如何通过子窗体传递数据?但是这些数据需要始终存在

前任:。在 form2 上,事件DataGridView2_SelectionChanged我需要从数据库中获取一些数据并放入 form3 DataGridView3 中。但在 form3 上,我在 DataGridView3 上有一个方法和绑定源和数据集绑定。所以我需要访问这种方法。

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

如何使用来自父子项的子窗体数据和组件.?窗口窗体 MDI

这已经被问了很多,并得到了足够的答案来帮助你。

(这就是为什么你得到了某人的反对票。在你问任何事情之前,你应该做一个适当的搜索!

使用您描述的设置,您可以采用以下方式:将主窗体的引用交给构造函数中的每个子窗体。保留此引用并使用它来访问主窗体,并通过其多个窗体句柄访问所有其他子窗体。

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

在表格23中:

// a class variable:
public Form1 form1;
public Form23(Form1 form1_);
{
    InitializeComponent();
    form1 = form1_;
}

现在,您可以使用 form1 作为中心,并像这样引用每个同级:

form1.form22.somePublicDataFieldOrWhatever...

谢谢你的回答。
这就是我现在的做法:
在主窗体中:

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();
}
}

然后每个子窗体都有一个对主窗体的引用,就像@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考虑