2017-08-15 27 views
-1

私は別のクラスの部分クラスのメソッドにアクセスする必要があるところでC#アプリケーションを作っています。c#別のクラスからの部分呼び出しの呼び出しメソッド

具体的には、部分クラスとは異なるが同じ名前空間のクラスからリストビューにアイテムを追加したいとします。

私はこのように試してみました。その後、

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); 
    } 
} 

しかし、そのエラーを与えます静的(私はデザイナーのリストビューを作成しました)。イム私のUpdateListViewに呼び出しを使用して:私は部分クラスのメソッドからstaticキーワードを削除した場合

することは、私は、部分クラスのインスタンスを作成しようとしましたが、success.Anyのアイデアなし

ノート歓迎ですit.Iにアクセスカント新しいスレッドで実行されるため、後で実行されるためです。

+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

staticListをUpdateListViewから削除します。 test()では、UpdateListViewにアクセスする前にAaをインスタンス化する必要があります。

Aa temp = new Aa() 

あなたはその後、

temp.UpdateListView(someArray); 
+0

私はそれもやってみましたが、 "埋め込み文の大砲は宣言またはラベル付きの文である" –

+0

あなたの答えは誤解を招きます。単に新しいオブジェクトAaを作成すると空のオブジェクトになるからです。これは例の場合と同じではありません。それ自身で(おそらく空の)ListView –

関連する問題