【发布时间】:2016-02-10 19:34:09
【问题描述】:
我正在寻找一种最简单的方法来从另一个窗体访问在 Windows 应用程序窗体的主窗体中创建的设计时控件。我将想要操纵所有控件,并且不希望使用 getter 和 setter 方法。只会有几个额外的表单仅用于输入以更改主表单上的控件状态 - 所以我不关心这里的最佳实践,因为这不会是一个大项目很多人会工作,多个变量会混淆,因为我对此完全陌生,想要一些有效的东西。我不在专业的编程环境中工作。
我希望能够以某种方式简单地用点语法解决它们。
也就是说:仅仅将类型更改为“公共”似乎并不允许我这样做。
因此,对于文本框,当我将其更改为:
private System.Windows.Forms.RichTextBox AssignmentSectNumber;
到
public System.Windows.Forms.RichTextBox AssignmentSectNumber;
一旦我把它放到我的表单中,C#系统会自动声明它,我仍然无法从表单二中访问它
Form1.AssignmentSectNumber.Text
有什么方法可以在Form1 中设置控件,以便可以通过Form1 通过点语法或直接通过直接寻址它们来在Form2 中寻址它们?
PS:当我在设计时将控件放入表单时,我看不到将控件“公开”在列出的任何属性下的方法。我错过了什么吗?
【问题讨论】:
-
很难说你想在这里做什么。
Form1.AssignmentSectNumber会报错,因为AssignmentSectNumber是一个实例属性,而不是静态的。您不能在运行时更改表单的设计,因为在加载表单并进行InitializeComponent调用后,表单将重置为默认值。我认为最好的选择是以编程方式构建整个表单,但这是一个巨大的 PIA,又名Form newForm = new Form(); newForm.Controls.Add(new SomeControl());... 用于所有控件和设置。 -
这真的不是我的选择。表格是完全设计好的。这需要付出很大的努力。你是说如果我在设计模式下制作了两个表单,并且表单 1 有一个文本框,那么表单 2 中的代码就无法更改表单 1 文本框中的文本? form1 中的所有控件必须永远与 form2 隔离,除非我在程序中创建它们?
-
可以修改,但是要修改它的一个instance,即
Form2 frm2 =new Form2(); frm2.AssignmentSelector.Text ="some value";不能对类型本身进行操作,必须对实例。这也意味着论坛上的控件需要设置为公开。 -
这可能是一个愚蠢的问题,但请记住,我是这方面的新手。当我运行程序 form1 出现在屏幕上。这不是说一定有它的实例吗?如果该实例的名称不是 form1 那会是什么?
-
查看您的 Program.cs 文件,您会看到类似
Application.Run(new Form1());的行。那是正在创建的 Form 的实例,它不会存储在变量中,但可以对其进行更改。
标签: c# forms controls design-time