如何在C#中将字符串或值从usercontrol传递给主窗体

时间:2016-09-09 18:14:05

标签: c# winforms user-controls

我创建了一个包含许多按钮的usercontrol,在主窗体中我有一个文本框。 我将usercontrol添加到主窗体,我想单击usercontrol上的任何按钮,并让主窗体中的文本框显示按钮文本。 问题是如何将usercontrol中的按钮字符串传递给主窗体中的文本框? This is what I'm trying to do

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();

    }
    public string a ;




    private void button1_Click(object sender, EventArgs e)
    {
        a = button1.Text;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        a = button2.Text;
    }

    private void button3_Click(object sender, EventArgs e)
    {
        a = button3.Text;


    }

主要表单代码是:

 private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox1.Text = usrCtrl.a;
        // usrCtrl come from : Usercontrol1 usrCtrl = new Usercontrol1();
    }

并且它在文本框中没有显示任何内容。

2 个答案:

答案 0 :(得分:1)

参考此answer,您需要创建一个属性更改事件。

UserControl.cs类;

public partial class UserControl1 : UserControl
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public UserControl1()
        {
            InitializeComponent();
        }

        private string stringA;

        public string a
        {
            get { return stringA; }
            set
            {
                if (value != stringA)
                {
                    stringA = value;
                    if (PropertyChanged!= null)
                    {
                       PropertyChanged(this, new PropertyChangedEventArgs(a));
                    }
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            a = button1.Text;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            a = button2.Text;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            a = button3.Text;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            a = button4.Text;
        }
    }

在表单加载中,我们需要定义事件,

 private void Form1_Load(object sender, EventArgs e)
        {
            cntr.PropertyChanged += Cntr_PropertyChanged; // press tab + tab after += and it will generate the following method automatically.
        }

这是事件;

 private void Cntr_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            textBox1.Text = cntr.a.ToString(); //cntr is the instance of UserControl1

        }

希望有所帮助,

答案 1 :(得分:0)

更改textBox1.Text值的代码位于错误的事件处理程序中。

textBox1_TextChanged事件处理程序仅在该字段中的文本发生更改时触发。

您需要做的是:

textBox1.Text = a;

点击事件处理程序中的