[英]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.