将Panel2从Form2添加到form1(MainForm)

时间:2013-06-12 13:52:32

标签: c# windows-forms-designer

好的,我有2个表单...在f1上是一个flowlayoutPanel和一个打开f2的按钮。 在f2上有小面板,每个都是不同的颜色。 我想这样做:当我从f2点击一个面板时,在f1中的FLP中创建一个具有相同颜色和大小的面板。问题是当我点击f2上的第一个面板时没有任何反应。 这就是我到目前为止所做的:

f1

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

F2

Form1 f1 = new Form1();        
private void panel1_Click(object sender, EventArgs e)
{
    Panel pnl = new Panel();
    pnl.BackColor = panel1.BackColor;
    pnl.Size = panel1.Size;
    f1.BackColor = panel1.BackColor;
    f1.FLPMain.Controls.Add(pnl);

    this.Close();
}   

3 个答案:

答案 0 :(得分:1)

因此,您的孩子表格不需要知道您的第一张表格。听起来你正在创建类似通用颜色选择工具的东西。例如,您应该能够在应用程序中的其他位置使用相同的表单来选择颜色。

作为一般规则,最好是如果子表单“不知道”它的父表单,它会使它们分离,使得单独编写每个类更容易,而不会强迫开发人员对其他类型的知识如此了解项目。实际上并不是非常难。

因此,不是让Form2去向Form1添加一个面板,它可以在选择颜色和大小时通知Form1。这是通过一个事件完成的:

public class Form2 : Form
{
    //define the event
    public event Action<Color, Size> ColorChosen;

    private void panel1_Click(object sender, EventArgs e)
    {
        //raise the event
        var panel = (Panel)sender;
        ColorChosen(panel.BackColor, panel.Size);

        Close();
    }
}

(大小说明;通过使用sender,可以将同一个事件处理程序添加到您想要点击的所有面板中,而不是让大量的事件处理程序执行几乎相同的操作。)< / p>

然后在Form1上我们只为这个自定义事件分配一个事件处理程序,我们在其中创建并向表单添加一个新面板:

Form2 child = new Form2();
child.ColorChosen += (color, size) =>
{
    Panel panel = new Panel();
    panel.BackColor = color;
    panel.Size = size;
    Controls.Add(panel);
};
child.Show();

答案 1 :(得分:0)

您正在此处创建Form1的新实例:

Form1 f1 = new Form1();

但是您想在现有面板上添加面板,请使用:

Form f1 = Application.OpenForms['formname']; 

答案 2 :(得分:0)

就这样做吧

private void Add_Color_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.Show();
}

class Form2
{
    private Form1 _frm;
    public Form2(Form1 frm)
    {
        //initialize + other code if required
        _frm = frm;
    }

    private void Panel_Click(object sender, EventArgs e)
    {
        _frm.CreatePanel(/*param you need*/);  //name it what ever you want
    }
}
像这样的事情应该可以胜任

/ e可能存在一些错别字,但想法是