通过访问面板控制

时间:2016-05-04 20:43:03

标签: c# winforms panel

所以我有两种形式。在表单1上,我创建了一个名为panel1的面板。我的问题是,是否可以将控制权传递给另一个表单并从另一个表单添加控件。这是我目前的代码:

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

    public Control AccessPanel
    {
        get { return panel1; }
        set { panel1.Controls.Add(value); }
    }
}  

窗体2:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
        MainForm = this.MainForm;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
         this.MainForm.AccessPanel1.Controls.Add(/*Some Control*/)
    }
}

我真的很欣赏正确方向的一点。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我们假设Form1是主窗体,Form2是从主窗体打开的另一种形式(可能是对话框)。而且我们假设Form2想要在第一个表单的面板上添加控件。然后Form2需要对第一个表单的引用。您可以在构造函数中传递一个:

public partial class Form2 : Form
{                           
    private Form1 _form1;

    public Form2(Form1 form1)
    {
        _form1 = form1;
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        _form1.AddControl(/*Some Control*/); 
    }
}

我不会让面板本身公开。 Form2应该尽可能少地了解Form1。这样可以减少表单之间的依赖关系。

Form1我会添加此方法

public void AddControl(Control control)
{
    panel1.Controls.Add(control);
}

Form1中,您可以这样打开Form2

var form2 = new Form2(this); // Pass Form1 through the constructor.
form2.Show(this); // Here `this` is the owner.
                  // It ensures that Form2 always stays on top of Form1.

或使用ShowDialog