从用户控件访问父控件 - C#

Far*_*man 30 c# user-controls winforms

如何在C#(winform)中访问用户控件的父控件.我使用以下代码,但它不适用于所有类型的控件,如ListBox.

Control[] Co = this.TopLevelControl.Controls.Find("label7", true);
Co[0].Text = "HelloText"
Run Code Online (Sandbox Code Playgroud)

实际上,我必须从用户控件中添加放置在父"Form"上的Listbox中的项目.

dkn*_*ack 55

描述

您可以使用父控件Control.Parent.

样品

因此,如果您在表单上放置了控件,则表示this.Parent您的表单.

在你的控制中你可以做到

Form parentForm = (this.Parent as Form);
Run Code Online (Sandbox Code Playgroud)

更多信息

Farid-ur-Rahman评论后更新(他在问这个问题)

我的控件和列表框(listBox1)都放在窗体(Form1)上.当用户按下放在我的Control中的按钮时,我必须在listBox1中添加项目.

你有两种可能的方法来完成这项工作.

1.使用`Control.Parent

样品

的MyUserControl

    private void button1_Click(object sender, EventArgs e)
    {
        if (this.Parent == null || this.Parent.GetType() != typeof(MyForm))
            return;

        ListBox listBox = (this.Parent as MyForm).Controls["listBox1"] as ListBox;
        listBox.Items.Add("Test");
    }
Run Code Online (Sandbox Code Playgroud)

要么

2.

  • 把财产public MyForm ParentForm { get; set; }交给你UserControl
  • 在表单中设置属性
  • 假设您ListBox的名字listBox1另有更改名称

样品

MyForm的

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        this.myUserControl1.ParentForm = this;
    }
}
Run Code Online (Sandbox Code Playgroud)

的MyUserControl

public partial class MyUserControl : UserControl
{
    public MyForm ParentForm { get; set; }

    public MyUserControl()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (ParentForm == null)
            return;

        ListBox listBox = (ParentForm.Controls["listBox1"] as ListBox);
        listBox.Items.Add("Test");

    }
}
Run Code Online (Sandbox Code Playgroud)


key*_*rdP 10

您可以使用Control.Parent得到控制或父Control.FindForm拿到的第一个父Form控件上.在寻找表格方面,两者之间存在差异,因此一个可能比另一个更适合使用:

控件的Parent属性值可能与FindForm方法返回的Form不同.例如,如果RadioButton控件包含在GroupBox控件中,并且GroupBox位于Form上,则RadioButton控件的Parent是GroupBox,GroupBox控件的Parent是Form.