我的主要表单包含一个TextBox
控件,该控件将在整个应用程序中用作类似记事本的功能。
从主窗体调用的一些子窗体将共享主窗体的TextBox的Text
属性,该属性将不可见 - 只有子窗体中的那些属性才会显示。
我为每个子表单使用扩展Form
,并使用ShowDialog()
调用它们。
分享"分享"的最佳途径是什么?所有子表单和主表单之间的文本?
请原谅我破碎的英语。
答案 0 :(得分:1)
您可以创建一个具有指向某个函数的公共静态属性的类,然后将此属性用作其他表单上的方法。您应该在初始化主窗体时初始化此属性。
E.g。
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");
}
}
答案 1 :(得分:0)
您在此处要做的是在表单上创建新活动:
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();