-->

DockPanel中套房和跨多个表单传递数据(Dockpanel Suite and passing

2019-10-18 02:57发布

您好我无法找到任何引用的正是我一直在寻找。 我看到的传递数据的网站很多例子两种形式,如之间

如何传递的值从一种形式到另一个? 使用的一种形式的控件到另一个 如何访问继承的窗体上的控件?

在几个博客和阅读时间的顶部和没有得到它。

所以基本上这里就是我试图完成使用DockPanel中套房的行为


主窗体parentForm拥有形式Form1停靠里面是永远存在的。 不能删除或重新加载是恒定的(所以应始终是相同的情况下我会承担),有一个文本框frm1BoxparentForm有一个按钮菜单栏button1 ,这将打开一个第三种形式Form2还具有一个文本框frm2Box 。 我希望能够点击button1 (从parentForm )有它打开Form2 ,并通过无论是在frm1Boxfrm2Box


因此,从阅读这似乎是建立属性是什么大家推荐所以这就是我没有和它的伟大工程,如果我只是做了从Form1上放置一个按钮,点击打开窗口2并传递数据,但我似乎无法弄清楚的时候添加另一种形式。 这显然不是我的全部代码,我会很高兴,如果为了节省空间,需要它只是didnt后我的实际代码。

//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文本框的数据拉。

感谢您事先的任何答复。

Answer 1:

你是如此接近。 在属性中的“二传手”在文本框中显示传递的值,但如何在“吸气剂”检索从文本框中的值? 它只返回存储在私有变量的值。 为Form1,你(也许像通的框TextChanged()事件)设置直通代码私有变量“_custName”莫名其妙(未显示)?

如果没有,更改属性到:

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

这将返回,实际上是在文本框中的值,并希望把它变成你的第二个形式...



Answer 2:

我还没有与此控件在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的公开内容,现在到窗体2访问。 例如,假设Form1中有一个名为txtName的文本。 您可以设置用下面的代码的文本属性:

frm1.txtName.text="Any Name";


文章来源: Dockpanel Suite and passing data across multiple forms