我创建了一个包含许多按钮的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();
}
并且它在文本框中没有显示任何内容。
答案 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;
。