从不同形式访问公共控制C#

时间:2014-05-05 10:54:13

标签: c# winforms forms

我一直在努力解决这个问题,所以我希望你能帮助我。

我试图让表单2 在用户点击后设置位于表单1 中的RichboxText文本(名为" sourceCode") 表单2 上的按钮。

我将RichboxText修改器更改为" public"我可以通过在表格2按钮中放置以下内容来访问控件:

private void buttoncreatetable_Click(object sender, EventArgs e)
    {
        GlobalVar.table = "<table" + " align=" + "\"" + alignment.Text + "\"" + " border=" + "\"" + bordersize.Value + "\"" + 
            " cellpadding=" + "\"" + padding.Value + "\"" + " cellspacing=" +
            "\"" + spacing.Value + "\"" + " style=" + "\"" + "width:" + width.Value + "px;"
            + " height:" + height.Value + "px;" + "\"" + ">" + Environment.NewLine + "<tbody>"; //end tbody, table, tr and td

        Form1 form1 = new Form1();
        form1.Show();
        form1.sourceCode.SelectedText = GlobalVar.table;

然而,这段代码的结果是虽然它将文本插入到Richbox中,但是它创建了一个完全*新的Form 1实例并执行它,而不是将文本插入到Form的原始实例的Richbox中1而不创建新的。

我怀疑原因是因为这段代码:Form1 form1 = new Form1();它实例化Form1的新副本。但是,如果不这样做,就无法轻松访问Form 1控件属性。

请帮助我。提前谢谢!

2 个答案:

答案 0 :(得分:1)

Form firstForm = Application.OpenForms["FormName"];

OpenForms属性是一个非常基本的属性,列出了当前打开的表单。只需使用表单的名称作为ID。

Click here for OpenForms documentation

答案 1 :(得分:0)

只需在Form1课程中添加Form2引荐属性。

public Form1 form1;

并在Main方法中指定它(我假设你在那里初始化它们)。

Form1 form1 = new Form1();
Form2 form2 = new Form2();
form1.Show();
form2.Show();
form2.form1 = form1;

编辑:此外,您不应该更改一个表单的内部元素。它打破了基本的OO编程原则。而是在Form1

中为自己写一个方法
void UpdateSelectedText(string updatedText)
{
    sourceCode.SelectedText = updatedText;
}

然后从form2

调用它
form1.UpdateSelectedText("Some new text");