2017-08-15 3 views
-1

Ich mache C# App, wo ich auf Methode in Teilklasse von einer anderen Klasse zugreifen muss.C# Calling Methode in Teilanruf von einer anderen Klasse

Um genauer zu sein Ich möchte Elemente zu ListView von Klasse hinzufügen, die sich von Teilklasse unterscheidet, aber in demselben Namespace.

ich so versucht:

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

und dann von einer anderen Klasse zugreifen wie:

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

Aber sein einen Fehler geben, da statische Methode nur statische Variablen zugreifen können, und meine Listview ist nicht statisch (Ich habe diese Listenansicht in vs Designer erstellt).

Wenn ich von Verfahren in Teilklasse Schlüsselwort static entferne dann kann ich nicht it.I Zugriff versuchte Instanz von partieller Klasse zu schaffen, aber ohne success.Any Idee ist willkommen

Anmerkung: Im mit Invoke in meinem UpdateListView Methode, weil später, dass auf neuen Thread ausgeführt wird

+4

'" Ich habe versucht, eine Instanz einer Teilklasse zu erstellen, aber ohne Erfolg. "- Nun, was hast du versucht? Um auf eine Instanz eines Objekts zuzugreifen, benötigen Sie tatsächlich eine Instanz dieses Objekts. Wo ist die Instanz Ihrer Form? – David

Antwort

0

Die Art einer objektorientierten Sprache ist, dass Objekte nicht über einen universellen Zugang andere Objekte zu ändern. Dies ist eine gute Sache.

Sie haben relativ wenig Code bereitgestellt, daher ist es schwierig, hier eine perfekte Antwort zu finden. Es gibt jedoch einige Paradigmen, die dieses Problem lösen.

Eine davon ist die Instanz auf Ihre Testklasse zu übergeben, wie folgt aus:

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

Oder, wenn Klasse test tatsächlich die ListView enthält, können Sie das auf eine statische Methode in Aa passieren.

Letztendlich sollten Sie über die logische Beziehung zwischen diesen Objekten nachdenken, um zu bestimmen, wie diese Objekte kommunizieren sollen.

0

Entfernen Sie das statische Schlüsselwort von UpdateListView, wie Sie zuvor getan haben. In test() müssen Sie Aa vor dem Zugriff auf UpdateListView instanziieren.

Aa temp = new Aa() 

Anschließend können Sie die Methode aufrufen, indem

temp.UpdateListView(someArray); 
+0

Ich habe das auch versucht, aber es gibt mir "Eingebettete Anweisung kann eine Deklaration oder beschriftete Aussage sein" –

+0

Ihre Antwort ist irreführend, weil einfach ein neues Objekt vom Typ 'Aa' erstellen wird in einem leeren Objekt führen. Dies ist nicht das gleiche wie im Beispiel. Mit seinem eigenen (wahrscheinlich leeren) ListView –

Verwandte Themen