在子窗体上使用主窗体中的控件

本文关键字:窗体 控件 | 更新日期: 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();