Get access to parent control from user control - C#

后端 未结 9 1868
甜味超标
甜味超标 2020-11-29 06:42

How do I get access to the parent controls of user control in C# (winform). I am using the following code but it is not applicable on all types controls such as ListBox.

9条回答
  •  误落风尘
    2020-11-29 07:03

    Description

    You can get the parent control using Control.Parent.

    Sample

    So if you have a Control placed on a form this.Parent would be your Form.

    Within your Control you can do

    Form parentForm = (this.Parent as Form);
    

    More Information

    • MSDN: Control.Parent Property

    Update after a comment by Farid-ur-Rahman (He was asking the question)

    My Control and a listbox (listBox1) both are place on a Form (Form1). I have to add item in a listBox1 when user press a button placed in my Control.

    You have two possible ways to get this done.

    1. Use `Control.Parent

    Sample

    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");
        }
    

    or

    2.

    • put a property public MyForm ParentForm { get; set; } to your UserControl
    • set the property in your Form
    • assuming your ListBox is named listBox1 otherwise change the name

    Sample

    MyForm

    public partial class MyForm : Form
    {
        public MyForm()
        {
            InitializeComponent();
            this.myUserControl1.ParentForm = this;
        }
    }
    

    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");
    
        }
    }
    

提交回复
热议问题