传递对面板控制的访问

Passing Acess to Panel Control

所以我有两种形式。在表格 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*/)
    }
}

如果能指出正确的方向,我将不胜感激。

提前致谢!

假设 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*/); 
    }
}

我不会制作面板本身 public。 Form2Form1 的了解越少越好。这会减少表单之间的依赖性。

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.