【问题标题】:How to Design a Second Form?如何设计第二种形式?
【发布时间】:2013-11-17 15:29:33
【问题描述】:

我正在尝试制作第二个表单并访问所有主要表单方法、值等...所以我要做的是:

public partial class Principal : Form
{
    public Principal()
    {
        InitializeComponent();
    }
...

在一种方法中,我有...

private void agregarUsuarioToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form Form2 = new Form();
    Form2.Show();
}

我想在 Form2 中我可以访问我在主表单中拥有的所有内容,但我想知道如何编辑这个 Form2,如何放置按钮或其他东西,因为我没有创建表单,只是 Form 的另一个实例()。

【问题讨论】:

  • 看起来您想动态地向表单添加控件,但除非您了解它的必要性,否则不建议这样做。为什么不与设计师一起打开您的Form2 并在那里设计您的 UI?

标签: c# winforms methods


【解决方案1】:

首先,您不能从第二个表单访问主表单上的值,除非第二个表单引用了第一个主表单。它们是完全独立的实例。第二个表单只是创建第一个表单的模板(类型)的另一个副本。第一个表单中的所有状态或数据都特定于表单的实例(除非声明为static)。表单模板中定义的所有控件和可视元素都是在实例化表单时(当构造函数运行时)在模板的每个实例中创建的。

如果您需要第二种形式来引用第一种形式上的值,如何做到最好取决于如何、何时以及为什么......如果您只需要在构建第二种形式时这样做,并且永远不会再次在第一个表单的生命周期内,如果您有对表单的第一个实例的引用,则可以在构造 (Form Form2 = new Form();) 期间执行此操作。如果您稍后也需要访问第一个实例上的值(在第二个实例的生命周期内),那么您需要添加对第一个实例的引用作为表单的私有字段或属性,以便在第二种形式总是引用第一种形式。使第二个实例成为具有此附加属性的第一个表单的派生(子)实例的最佳方法,并将构造函数中对第一个表单的引用传递给该第二个派生表单类型

public SecondForm: Principal
{
    public Form PrincipalForm { get; set; }

    public SecondForm(Principal principalForm)
    {
        InitializeComponent();
        PrincipalForm = principalForm;
    }
    //  other stuff
}

然后,当您创建第二个实例时,请改为创建 SecondForm 的实例。它看起来与第一个实例完全一样(因为它派生了在 Principal 上定义的所有内容),但会有这个附加属性。

private void agregarUsuarioToolStripMenuItem_Click(object sender, EventArgs e)
{
    SecondForm Form2 = new SecondForm(firstPrincipalForm);
    Form2.Show();
}

现在,在第二个表单的内部和公共方法和代码的任何地方,您都可以根据需要引用第一个表单

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多