Dockpanel Suite并跨多个表单传递数据

时间:2013-05-13 18:42:34

标签: c# .net winforms forms dockpanel-suite

嗨,我找不到任何完全引用我所寻找的东西。我在两个表单之间传递数据的网站上看到了很多例子,例如

How can I pass values from one form to another? Using The Controls Of One Form Into Another How to access controls on an inherited form?

除了几个博客和几个小时的阅读而没有得到它。

所以基本上这就是我想要完成的行为 使用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来存储数据。如果可能的话,我宁愿不使用基于文件的存储。另外值得注意的是,一旦找到正确的方法,它就需要可扩展,因为当我实际实现它时,它将是parentForm上的5个不同的按钮,打开5个不同的形式但仍然从同一个Form1中提取数据form1将有大约10个文本框来提取。

提前感谢您的回复。

2 个答案:

答案 0 :(得分:3)

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

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

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

这将返回TextBox中实际存在的值,并希望将其转换为第二种形式...

答案 1 :(得分:0)

我没有在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;

}

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

frm1.txtName.text="Any Name";