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