在子窗体上使用主窗体中的控件
本文关键字:窗体 控件 | 更新日期: 2023-09-27 17:49:34
我的主表单包含一个TextBox
控件,它将作为一个类似记事本的功能在整个应用程序中使用。
从主表单调用的一些子表单将共享主表单的文本框的Text
属性,该属性将不可见-只有子表单中的子表单才可见。
我使用扩展的Form
为每个子形式,他们被称为使用ShowDialog()
。
在所有子表单和主表单之间"共享"文本的最佳方式是什么?
请原谅我的蹩脚英语
您可以创建一个具有公共静态属性的类,该属性指向某个函数,然后在其他表单上将此属性用作方法。您应该在初始化主表单时初始化此属性。
。
public class Utility
{
public static Action<string> SetNotePadValue
{
get;
set;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Utility.SetNotePadValue = (s) =>
{
// textBox1 is a control on this form
this.textBox1.AppendText(s + "'r'n");
};
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// this will set value in Form1's textBox1
Utility.SetNotePadValue("Some text");
}
}
你要做的是在你的表单上创建一个新的事件:
public class Form2 : Form
{
public event Action<string> TextChanged; //TODO consider renaming
private void button1_Click(object sender, EventArgs e)
{
var handler = TextChanged;
if(handler != null)
handler(textbox.Text);
}
}
主表单可以在创建表单时订阅此事件:
Form2 popup = new Form2();
popup.TextChanged += text => DoSomethingWithText(text);
popup.ShowDialog();