Dockpanel套件和跨多个表单传递数据

本文关键字:表单 数据 套件 Dockpanel | 更新日期: 2023-09-27 18:13:16

嗨,我找不到任何参考我正在寻找的东西。我在网站上看到过很多在两个表单之间传递数据的例子,比如

如何将值从一种形式传递到另一种形式?将一个窗体的控件转换为另一个窗体如何访问继承表单上的控件?

我看了好几个博客,读了好几个小时,还是没找到。

基本上这就是我想要完成的行为使用DockPanel Suite


主表单parentForm有一个形式Form1停靠在里面,它总是在那里。不能删除或重新加载是恒定的(所以应该总是相同的实例,我假设),有一个文本框frm1BoxparentForm有一个菜单栏,有一个按钮button1,它将打开第三个表单Form2,也有一个文本框frm2Box。我希望能够单击button1(从parentForm)让它打开Form2并将frm1Box中的任何内容传递给frm2Box


所以从阅读它似乎设置属性是每个人都推荐的,所以这就是我所做的,如果我只是从一个按钮点击form1打开form2并传递数据,它的效果很好,但我似乎无法在添加另一个表单时弄清楚。这显然不是我的完整代码,我很乐意张贴我的实际代码,如果它是需要的,只是没有节省空间。

//Parent Form
public partial class parentForm : Form
public static Form1 form1 = new Form1();
public void showForm1()
    {
        form1 = new Form1();
        form1.Show(dockPanel1, DockState.DockLeft);
    }
private void parentForm_Load(object sender, EventArgs e)
    {
        showForm1();
    }
private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.CustNameCb = form1.CustName;
        form2.Show();
    }

//Form1
public partial class Form1 : DockContent
   {
private string _custName;
public Form2()
    {
        InitializeComponent();
    }
public string CustName
    {
        get
        {
            return _custName;
        }
        set
        {
            _custName = value;
            frm1Box.Text = _custName;
        }
    }

//Form2
public partial class Form2 : Form
   {
private string _custNameCb;
public Form2()
    {
        InitializeComponent();
    }
public string CustNameCb
    {
        get
        {
            return _custNameCb;
        }
        set
        {
            _custNameCb = value;
            frm2Box.Text = _custNameCb;
        }
    }

我想我完全错过了这个概念,但我在搜索中找不到一个"好"的例子,或者至少一个我可以遵循的例子。我是编程新手,尤其是c#,所以请原谅我的经验不足。如果有人有更好的方法,请告诉我。我考虑过使用SQL来存储数据。如果可能的话,我不喜欢使用基于文件的存储。此外,值得注意的是,一旦我找到这样做的适当方法,它将需要可缩放,因为当我实际实现这将是5个不同的按钮在parentForm打开5个不同的表单,但所有仍然从相同的Form1拉数据Form1将有大约10个文本框的数据拉。

提前感谢任何回复。

Dockpanel套件和跨多个表单传递数据

你很接近了。在你的属性中,"setter"是在TextBox中显示传递的值,但是"getter"如何从TextBox中检索值呢?它只返回存储在私有变量中的值。对于Form1,您是否通过代码(如通过TextChanged()事件)以某种方式(现在显示)设置私有变量"_custName"?

如果没有,将属性更改为:

public string CustName
{
    get
    {
        return frm1Box.Text;
    }
    set
    {
        frm1Box.Text = value;
    }
}

这将返回文本框中实际存在的值并希望将其放到第二个表单中。

我还没有在c#中使用过这个控件,只有VB,但我会尽我所能描述如何在c#中完成。

要访问另一个窗体上的控件,调用窗体必须具有它试图访问的窗体的实例。这可以在使用依赖注入初始化表单对象时完成。

Form1 frm1 = new Form1();
Form2 frm2 = new Form2(frm1);
frm1.show(dockpanel1, DockState.dockright);
frm2.show(dockpanel1, DockState.dockleft);

表单2需要Form1类型的实例变量。

private Form1 frm1;

该变量将通过类的构造函数设置。

public Form2(Form1 f) {
    frm1 = f;
}

Form1的公共内容现在可以被Form2访问。例如,假设Form1有一个名为txtName的文本框。您可以使用以下代码设置text属性:

frm1.txtName.text="Any Name";