0

我从另一个子窗体(form1)打开一个子窗体(form2)并将 MDI 设置为父窗体。

这是我如何从 MainForm 打开 form1 作为 MainForm 的子窗体

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form1 f1 = new form1();
        f1.MdiParent = this;
        f1.Show();
    }
}

这是 form2 如何作为来自 form1 的 MainForm 的另一个子窗体,它也是 MainForm 的子窗体

public partial class form1 : Form
{
    public form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        form2 f2 = new form2();
        f2.MdiParent = this.ParentForm;
        f2.Show();
    }
}

我如何将值从 form1 传递给 form2?我尝试了将值传递给模态形式的方法,但没有奏效

表格1

public partial class form1 : Form
{
    public form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        form2  = new form2();
        f2.MdiParent = this.ParentForm;
        f2.name = textBox1.Text;
        f2.Show();   
    }
}

表格2

public partial class form2 : Form
{
    public form2()
    {
        InitializeComponent();
    }
    private string NAME
    public string name
    {
        get { return NAME; }
        set { NAME = value; textBox1.Text = NAME; }
    }
}
4

4 回答 4

1

我认为主要问题是您用于 button1 单击的Form1 事件处理程序,因为您为 button1 发布了两个事件处理程序,Form1但我尝试了这个并且它有效。把它放在按钮1点击的事件处理程序中Form1

private void button1_Click(object sender, EventArgs e)
{
    //Create a new Instance of Form2
    Form2 f2 = new Form2();
    //Sets the MDI Property
    f2.MdiParent = this.ParentForm;
    //Shows the Form
    f2.Show();
    //Open the already created instance
    Form2 f = (Form2)Application.OpenForms["Form2"];
    //Update the Property
    f.name = textBox1.Text;
}
于 2013-09-25T21:57:01.880 回答
0

您可以设置MdiParent,也可以调用MdiParent

public partial class MainForm : Form // IsMdiContainer = true in Properties
{
    private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.MdiParent = this;
        form1.Show();
    }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.MdiParent = this.MdiParent;
        form2.tb = textBox1.Text;
        form2.Show();
    }
}

public partial class Form2 : Form
{
    private string v;

    public Form2()
    {
        InitializeComponent();
    }

    public string tb
    {
        get { return textBox1.Text; }
        set { v = value; textBox1.Text = v; }
    }
}
于 2013-09-26T07:58:12.320 回答
0

这对我有用,你没有InitializeComponent调用的构造函数,你的第二个代码发布没有调用的分配。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.MdiParent = this;
        form2.tb = textBox1.Text;
        form2.Show();
    }
}

public partial class Form2 : Form
{
    private string v;

    public Form2()
    {
        InitializeComponent();
    }

    public string tb
    {
        get { return textBox1.Text; }
        set { v = value; textBox1.Text = v; }
    }
}
于 2013-09-25T16:07:31.673 回答
0

当我将值从一种形式传递到另一种形式时,我通常会创建一个参数对象

public class FormParams
{
     public string Name {get; set;}
}

以接收参数的形式

public class Form2
{
   public FormParams Parameters {get; set;}
   ...
}

在打电话的形式中,你会做类似的事情

FormParams frmParams = new FormParams();
frmParams.Name = "KarlX"

Form2 form = new Form2();
form.Parameters = frmParams;
form.MdiParent = this;
form.Show();

当您想使用传递给表单的值时,只需使用

txtStackOverFlowName.Text = Parameters.Name;
于 2013-09-25T16:28:51.400 回答