首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个类访问非静态属性

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

Stack Overflow用户
提问于 2015-03-08 00:55:00
回答 3查看 2.8K关注 0票数 0

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

代码语言:javascript
复制
public string SelectedProfile
{
    get { return (string)cbxProfiles.SelectedItem; }
    set { cbxProfiles.SelectedItem = value; }
}

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2015-03-08 00:57:18

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

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

票数 3
EN

Stack Overflow用户

发布于 2015-03-08 00:57:04

正如在编译错误中所说的,您需要拥有现有MainForm实例的引用才能对其执行操作。

代码语言:javascript
复制
// 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
EN

Stack Overflow用户

发布于 2020-07-27 15:20:47

我参加聚会可能会迟到,但我的解决方案也许有一天会对某个人有所帮助。您可以使用Application.OpenForms[n]...直接访问打开的表单的控件(甚至是私有控件)。

例如,假设您已经创建了一个MainForm,然后创建了一个comboBox,使其位于MainForm =>选项卡(名为tabControl) => TabPage (名为tabPageMain) =>面板(名为pnlMain) => ComboBox (名为cmbSeconds)中。然后,您可以访问最后一个控件,如下所示:

代码语言:javascript
复制
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视图(视图菜单=> Other Windows => Document Outline)可能会对您有所帮助,因为您可能忽略了中间的一些透明容器。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28917420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档