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

时间:2014-03-11 13:53:39

标签: c# winforms textbox visual-studio-2013

我的主要表单包含一个TextBox控件,该控件将在整个应用程序中用作类似记事本的功能。

从主窗体调用的一些子窗体将共享主窗体的TextBox的Text属性,该属性将不可见 - 只有子窗体中的那些属性才会显示。

我为每个子表单使用扩展Form,并使用ShowDialog()调用它们。

分享"分享"的最佳途径是什么?所有子表单和主表单之间的文本?

请原谅我破碎的英语。

2 个答案:

答案 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();