我在非静态MainForm
类中有一个非静态属性:
public string SelectedProfile
{
get { return (string)cbxProfiles.SelectedItem; }
set { cbxProfiles.SelectedItem = value; }
}
我想从另一个非静态类中获取此属性的值。使用MainForm.SelectedProfile
会出现错误说"非静态字段,方法或属性需要对象引用"。
通常我会通过使SelectedProfile
静态来解决这个问题,但我不能,因为cbxProfiles(一个ComboBox控件)不能变为静态。
那么如何在不使其静态的情况下访问该属性的值?
答案 0 :(得分:3)
您可以使用与始终相同的方式访问非静态成员:使用对对象实例的引用。
因此,无论您希望能够使用该属性的任何代码,都需要向其传递对MainForm
对象的引用。
答案 1 :(得分:2)
正如编译错误中所述,您需要引用现有的MainForm
实例来对其进行操作。
// You surely do this somewhere in your code
MainForm mainForm = new MainForm();
// ...
// Use the reference to your mainForm to access its public properties
String selectedProfile = mainForm.SelectedProfile;
答案 2 :(得分:0)
我可能聚会晚了,但是我的解决方案可能有一天会帮助某人。您可以使用Application.OpenForms[n]
...
例如,假设您创建了一个MainForm,然后创建了一个comboBox,使其位于MainForm中=> Tab(命名为tabControl)=> TabPage(命名为tabPageMain)=>面板(命名为pnlMain)=> ComboBox(命名为cmbSeconds)。然后,您可以按以下方式访问此最后一个控件:
ComboBox combo = Application.OpenForms[0].Controls["tabControl"].Controls["tabPageMain"].Controls["pnlMain"].Controls["cmbSeconds"] as ComboBox;
string SelectedProfile = (string)combo.SelectedItem;
// OR
bool isMaximized = Application.OpenForms[0].WindowState == FormWindowState.Maximized;
即您必须遍历从顶层表单到特定控件的路径。 Visual Studio的 Document Outline 视图( View 菜单=> 其他Windows => Document Outline )可能会帮助您这个bcoz您可能会忽略它们之间的一些透明容器。
请谨慎使用。例如,如果尚未创建任何引用控件的句柄,则可能会看到运行时异常。