C# 从不同的表单C访问公共控件#

C# 从不同的表单C访问公共控件#,c#,winforms,forms,C#,Winforms,Forms,我已经为此挣扎了一段时间,所以我希望你能帮助我 我正在尝试获取表单2,以便在用户单击表单2上的按钮后,设置位于表单1中的RichboxText(名为“源代码”)的文本 我将RichboxText修改器更改为“public”,通过在我的form 2按钮中放置以下内容,我可以访问该控件: private void buttoncreatetable_Click(object sender, EventArgs e) { GlobalVar.table = "<table

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

我正在尝试获取表单2,以便在用户单击表单2上的按钮后,设置位于表单1中的RichboxText(名为“源代码”)的文本

我将RichboxText修改器更改为“public”,通过在我的form 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;
private void按钮创建表\u单击(对象发送者,事件参数e)
{
GlobalVar.table=”“+Environment.NewLine+“”;//结束tbody、table、tr和td
Form1 Form1=新Form1();
表1.Show();
form1.sourceCode.SelectedText=GlobalVar.table;
然而,这段代码的结果是,尽管它将文本插入到Richbox中,但它创建了一个表单1的全新实例并执行了该操作,而不是在不创建新实例的情况下将文本插入表单1的原始实例的Richbox中

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


请帮助我。提前谢谢你!

formfirstform=Application.OpenForms[“FormName”];

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


.

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

public Form1 form1;
并将其分配到Main方法中(我假设您正在那里初始化它们)

编辑:同样,你不应该改变一个表单的内部元素,因为它破坏了基本的OO编程原则。相反,你应该在
Form1

void UpdateSelectedText(string updatedText)
{
    sourceCode.SelectedText = updatedText;
}
然后从
form2

form1.UpdateSelectedText("Some new text");

它做了什么您不喜欢的事情?Form form1=Application.OpenForms[“form1”];form1.sourceCode.SelectedText=GlobalVar.table;这无法访问控件“sourceCode”。可能是因为
sourceCode
是私有的?在
Form1
中使用给定的字符串参数创建一个方法,该方法将更新文本本身。sourceCode是公共的。它仍然不起作用。这是一个非常糟糕的设计。一个表单不应该修改另一个表单上的属性。唯一有意义的情况是,如果显示拨号盘og框,作为对其的响应,您可以修改父窗体上的属性。但是,这样您就可以引用对话框窗体并可以轻松查询其属性。您可以使用
应用程序对其进行破解。OpenForms
,但我强烈建议重新考虑您的设计。我收到错误:无法分配“窗体1”因为它是一个方法组。我提供的代码不能生成这种错误-它说
form1
对象在
Form2
类中是一个方法,这是不正确的。再次修改代码。我想我把代码的第二部分放在了错误的区域。“main method”在哪里位于?在
Program.cs
文件中。我不想粗鲁,但这是基础知识。我假设您将表单初始化放在了那里,因为您没有提供任何详细信息。但是,您可能已经将一个表单包含在另一个表单中。没关系,我不太擅长这方面,但我会边做边学。我只知道初始化表单中的表单。我将上述代码添加到main方法中,但我收到以下错误:未将对象引用设置为“form1.sourceCode.SelectedText=GlobalVar.table”中的对象实例
form1.UpdateSelectedText("Some new text");