C# 从不同的表单C访问公共控件#
我已经为此挣扎了一段时间,所以我希望你能帮助我 我正在尝试获取表单2,以便在用户单击表单2上的按钮后,设置位于表单1中的RichboxText(名为“源代码”)的文本 我将RichboxText修改器更改为“public”,通过在我的form 2按钮中放置以下内容,我可以访问该控件: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
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");