我正在做一个应用程序,用户在文本框中输入一个值,然后他按下一个按钮,两个都在同一个用户控件中。然后文本框的结果将显示在其他用户控件的标签上。两个用户控件都采用相同的窗口形式。
谢谢!
答案 0 :(得分:3)
最常见的方法是使用事件。我就是这样做的:
首先定义一个EventArgs:
public class MyEventArgs : EventArgs
{
public string Text { get; private set; }
public MyEventArgs(string Text)
{
this.Text = Text;
}
}
然后在你的UserControl(带按钮的那个)中:
public partial class MyUserControl
{
public event EventHandler<MyEventArgs> ButtonClicked;
public MyUserControl()
{
//...
button1.Click += (o, e) => OnButtonClicked(new MyEventArgs(textBox1.Text));
}
protected virtual void OnButtonClicked(MyEventArgs args)
{
var hand = ButtonClicked;
if(hand != null) ButtonClicked(this, args);
}
}
然后在表单中订阅您的MyUserControl.ButtonClicked
事件,并在第二个控件中调用方法。
请注意,如果按钮的行为和文本框中的文本实际上不相关,您可以使用属性来输入文本,而使用空EventArgs
来代替您的活动
P.S。名称MyEventArgs
,MyUserControl
和ButtonClicked
仅用于演示目的。我鼓励您在代码中使用更具描述性/相关性的命名。
答案 1 :(得分:1)
试试这个:
public class FirstUserControl:UserControl
{
Public event EventHandler MyEvent;
//Public property in your first usercontrol
public string MyText
{
get{return this.textbox1.Text;} //textbox1 is the name of your textbox
}
private void MyButton_Clicked(/* args */)
{
if (MyEvent!=null)
{
MyEvent(null, null);
}
}
//other codes
}
public class SecondUserControl:UserControl
{
//Public property in your first usercontrol
public string MyText
{
set{this.label1.Text = value;} //label1 is the name of your label
}
//other codes
}
然后在你的MainForm中:
public class MainForm:Forms
{
//Add two instance of the UserControls
public MainForm()
{
this.firstUserControl.MyEvent += MainWindow_myevent;
}
void MainWindow_myevent(object sender, EventArgs e)
{
this.secondUserControl.MyText = this.firstUserControl.MyText;
}
//other codes
}