如何使用usercontrol更新表单中的标签文本?

时间:2019-09-26 08:58:11

标签: c# winforms user-controls

我在UserControl内放置了一个按钮,并将此UserControl放入了表单。 我希望单击按钮时可以更新表单中的文本框文本。

public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 form1 = new Form1();
            form1.textBox1.Text = "1";

            //The textbox text is not updated!
        }
    }

文本框文本未更新

3 个答案:

答案 0 :(得分:1)

您正在创建一个新的Form1。您没有显示它。您可能打算更新现有的Form1。我想将UserControl1放在Form1上。然后,您可以执行以下操作:

private void button1_Click(object sender, EventArgs e)
{
    // Get the parent form
    Form1 myForm = (Form1) this.parent;
    myForm.TextBox1.Text = "1";
}

如果您的UserControl1不在Form1上,则您需要以某种方式传递参考。

答案 1 :(得分:0)

删除创建新表单的行

 public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                textBox1.Text = "1";

                //The textbox text is not updated!
            }
        }

答案 2 :(得分:0)

请勿创建新表单。请删除该行。

我猜您正在尝试为Form中的TextBox设置文本,并且您的按钮位于UserControl中,该控件是Form的子组件。

如果是这样,请从您的Form中注册一个EventHandler并从UserControl中的Button中触发事件。

在您的UserControl中注册一个EventHandler:

public event EventHandler ButtonClicked;
protected virtual void OnButtonClicked(EventArgs e)
{
    var handler = ButtonClicked;
    if (handler != null)
        handler(this, e);
}
private void Button_Click(object sender, EventArgs e)
{        
    OnButtonClicked(e);
}

在您的表单中,您从UserControl订阅了该事件:

this.userControl1.ButtonClicked += userControl11_ButtonClicked;

private void userControl11_ButtonClicked(object sender, EventArgs e)
{
    this.TextBox1.Text = "1";
}

让我知道你的结果。