2017-09-21 186 views
0

我是C#的初學者。我在一個類中定義了DataGridvew「dgPins」以及名爲「pnlPins」的Panel。該應用程序使用幾個UI組合在一起設計。初始化是在類X如下從另一個類訪問同一個類的DataGridView實例

private void InitializeComponent() { 
    ... 
    private System.Windows.Forms.Panel pnlPINs; 
    private System.Windows.Forms.DataGridView dgPins; 
    ... 
} 

我使用此網格顯示一些銷從連接到以太網設備讀出的完成。一旦數據被填滿它看起來像這樣(這是一個按鈕,點擊一下鼠標),

private void mnuGeraetLesen_Click(object sender, EventArgs e) 
{ 
    ... 
    if (EthernetAvailable == true) 
    { 
     QueryAllCodeCommandHandler();// local function which fills the grid 
    } 
} 

enter image description here

現在在另一個UI(類)我有一個按鈕,需要訪問同一網格 實例並執行相同的任務。所以我在這個班上做了以下的事情(比如說Y班)。

private void _btnSearchDevices_Click(object sender, EventArgs e) 
{ 
    SingleDeviceInformationControl test = new SingleDeviceInformationControl(); 
    test.QueryAllCodeCommandHandler(); 
} 

但據我所知,這將創建一個不同的實例,將無法正常工作。所以網格保持如下空。

enter image description here

我想重命名DataGridView的公共靜態這使我能夠從任何地方訪問同一個實例,但它使整個項目的不穩定。 我已經做了一些研究,發現了類似的問題,但還沒有理解我真的必須做些什麼才能達到預期的結果。我非常感謝有關此問題的可能解決方案的任何提示。非常感謝你!

+0

既然你聲明你的DataGridView是私有的,你只能從同一個類訪問它,而不能從其他地方訪問它。因此,無論您需要將其聲明爲public,還是需要編寫setter和getter方法來訪問DataGridView(請參閱[公共,私有,受保護和沒有任何區別](https://stackoverflow.com/questions/614818)/what-is-the-difference-between-public-private-protected-and-nothing)以供參考)。通過將網格視圖聲明爲公共,我也不明白你的項目變得不穩定了嗎? – waka

+0

對不起,我的壞。它不會改變任何東西。因爲我忘了提及(壞)那些是單獨的用戶界面 – Isuru

回答

0

如果您以其他形式實例化YourForm,則必須讓您的Grid Public訪問它或將私有網格封裝在「公共」屬性中。

如果您在談論單獨的UI或UserContorls您可以創建一個用戶界面的靜態實例,就像這樣,您有義務將您的網格從私有修改爲公共。但是,建議您封裝專用網的「公共」屬性

private static YourForm _instance; 

/// <summary> 
/// static Instance of YourForm 
/// </summary> 
public static YourForm Instance 
{ 
    get 
    { 
    if (_instance == null) 
     _instance = new YourForm(); 
    return _instance; 
    } 
} 

YourForm是包含網格的形式,然後你可以訪問到您的網這樣

YourForm.Instance.dgPins

這方法通常與UserControls一起使用

+0

是的,它與UserControls。我嘗試過,但網格仍然是空的 – Isuru

相關問題