从不同形式的c#访问公共控件

本文关键字:访问 控件 | 更新日期: 2023-09-27 18:01:38

我已经为此挣扎了一段时间,所以我希望你能帮助我。

我试图得到形式2设置我的RichboxText的文本(命名为"sourceCode")位于形式1一旦用户点击按钮上的形式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 1的原始实例的Richbox中而不创建一个新的。

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

请帮助我。提前感谢!

从不同形式的c#访问公共控件

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

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

点击这里查看OpenForms文档

只需在您的Form2类中添加Form1引用属性。

public Form1 form1;

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

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

edit:同样,你不应该从一个表单更改另一个表单的内部元素。它打破了基本的OO编程原则。在Form1

中自己编写一个方法
void UpdateSelectedText(string updatedText)
{
    sourceCode.SelectedText = updatedText;
}
然后从form2 调用
form1.UpdateSelectedText("Some new text");