2017-08-15 153 views
-1

我正在做c#應用程序,我需要從另一個類的部分類訪問方法。c#調用另一個類的部分調用方法

更具體地說,我想將項目添加到不同於部分類但位於相同名稱空間的類的listview中。

我想是這樣的:

public partial class Aa : Form 
{ 
    public static void UpdateListView(string[] array) 
    { 
     if (ProcessNetUsageList.InvokeRequired) 
     { 
      ProcessNetUsageList.Invoke(new Action<string[]>(UpdateListView), array); 
     } 
     else 
     { 
      ListViewItem item = new ListViewItem(array[0]); 
      for (int i = 1; i < 4; i++) 
       item.SubItems.Add(array[i]); 
      ProcessNetUsageList.Items.Add(item); 
     } 
    } 
} 

,然後從喜歡另一個類訪問:

class Test 
{ 
    test() 
    { 
     ProgramName.Aa.UpdateListView(someArray); 
    } 
} 

但它給了一個錯誤,因爲靜態方法只能訪問靜態變量,而我的列表視圖心不是靜態(我在vs設計器中創建了該列表視圖)。

如果我從局部類的方法去除static關鍵字的話,我不能訪問它。我試圖創建部分類,但沒有success.Any想法實例是值得歡迎的

:IM在我UpdateListView使用調用方法,因爲稍後將在新線程上運行

+4

''我試圖創建部分類的實例,但沒有成功。「' - 那麼,你嘗試了什麼?因爲要訪問對象的實例,您確實需要該對象的實例。那麼表單的實例在哪裏? – David

回答

0

面嚮對象語言的本質訪問方法是對象不具有普遍的訪問和修改其他對象。這是好東西

您提供的代碼相對較少,因此很難在此提供完美的答案,但有幾個範例可以解決此問題。

一是實例傳遞到您的測試類,像這樣:

class Test 
{ 
    test(ProgramName.Aa form) 
    { 
     form.UpdateListView(someArray); 
    } 
} 

或者,如果類test實際上包含ListView,你可以傳遞一個靜態方法Aa

class Test 
{ 
    ListView someListView; 
    test() 
    { 
     ProgramName.Aa.UpdateListView(someListView, someArray); 
    } 
} 

最終,您應該考慮這些對象之間的邏輯關係,以確定這些對象應如何通信。

0

從UpdateListView中刪除靜態關鍵字,如以前所做的那樣。在test()中,您需要在訪問UpdateListView之前實例化Aa。

Aa temp = new Aa() 

然後,您可以通過使用

temp.UpdateListView(someArray); 
+0

我也嘗試過,但它給了我「嵌入式語句加農炮聲明或標記語句」 –

+0

您的答案具有誤導性,因爲簡單地創建一個類型爲'Aa'的新對象將導致一個空對象。這與示例中的不一樣。有它自己的(可能是空的)ListView –