繁体   English   中英

如何从另一个类访问非静态属性

[英]How to access a non-static property from another class

我在非静态MainForm类中有一个非静态属性:

public string SelectedProfile
{
    get { return (string)cbxProfiles.SelectedItem; }
    set { cbxProfiles.SelectedItem = value; }
}

我想从另一个非静态类获取此属性的值。 使用MainForm.SelectedProfile会出现错误,提示“非静态字段、方法或属性需要对象引用”。

通常我会通过将SelectedProfile设为静态来解决这个问题,但我不能,因为 cbxProfiles(一个 ComboBox 控件)不能设为静态。

那么如何在不使其静态化的情况下访问该属性的值呢?

您可以像往常一样访问非静态成员:通过使用对对象实例的引用。

因此,无论您希望能够使用该属性的代码是什么,都需要向它传递一个对MainForm对象的引用。

正如编译错误中所说,您需要引用现有的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;

我可能会迟到,但我的解决方案可能会在未来的某一天帮助某人。 您可以使用Application.OpenForms[n]直接访问一个开放表单的控件(甚至是私有的)...

例如,假设您已经创建了一个 MainForm,然后创建了一个组合框,使其位于 MainForm => Tab(名为 tabControl)=> TabPage(名为 tabPageMain)=> Panel(名为 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 的文档大纲视图(查看菜单 =>其他 Windows =>文档大纲)可能会帮助您解决此问题,因为您可能会忽略中间的一些透明容器。

请谨慎使用。 例如,如果尚未创建任何引用控件的句柄,您可能会看到运行时异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM