簡體   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