2016-06-28 9 views
0

Ich habe ein Problem mit der Übergabe einer listView an eine Klasse und Sortieren.ListView sortieren, indem Sie es an meine Sortierklasse übergeben - C#

Lassen Sie mich erklären, was die Idee meines Programms ist:

In Form1 erstelle ich eine listView und ich füge hinzu Artikel mit Subitems (Name, Datum, Nummer).

Danach habe ich ein ColumnClick Ereignis erstellt, das die Elemente nach der Spalte sortiert, auf die der Benutzer geklickt hat.

Meine Art-Algorithmus funktioniert gut, wenn es in der gleichen Form wie die listView in erstellt wird.

Zum Zwecke meinen Code machen besser lesbar ich beschlossen, meine Art-Algorithmus in einen separaten C# Datei zu übertragen (nennen wir es SortBy.cs). Das Ereignis ColumnClick sollte dann den Sortieralgorithmus aufrufen.

Allerdings sagt Visual Studio mir, dass in SortBy.cs „Der Name‚ListViewNAME‘nicht im aktuellen Kontext nicht existiert‘. Trotz der Tatsache, dass ich die Modifikatoren der listView Eigenschaften jeweils Öffentlichkeit verändert habe.

Wie kann ich richtig dieses Problem lösen und meine SortBy Methode aufrufen

ich den Code aus meinem Projekt extrahiert Zu diesem Zweck hier es drei Artikel nur enthält

bearbeiten Code hinzugefügt:..

-Code Form1

namespace Project1 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     MyList.View = View.Details; 

     MyList.Columns.Add("Name", 170); 
     MyList.Columns.Add("2.Sub", 170); 
     MyList.Columns.Add("3.Sub", 170); 

     ListViewItem Item1 = new ListViewItem("a"); 
     Item1.SubItems.Add("11"); 
     Item1.SubItems.Add("21"); 
     MyList.Items.Add(Item1); 

     ListViewItem Item2 = new ListViewItem("b"); 
     Item2.SubItems.Add("12"); 
     Item2.SubItems.Add("22"); 
     MyList.Items.Add(Item2); 

     ListViewItem Item3 = new ListViewItem("c"); 
     Item3.SubItems.Add("13"); 
     Item3.SubItems.Add("23"); 
     MyList.Items.Add(Item3); 
    } 

private void MyList_ColumnClick(object sender, ColumnClickEventArgs e) 
{ 

    if (e.Column == 0) 
    { 
    //normally: code for sorting by Name   
    } 

    if (e.Column == 1) 
    { 
    //Code for sorting by Sub1   
    } 

    if (e.Column == 2) 
    { 
    //Code for sorting by Sub2   
    } 


} 

-Code SortBy:

namespace Project1 
{ 
class SortBy 
{ 
    public void Sorting() 
    { 
     int CounterOfList = MyList.Items.Count; 
     //followed by sorting algorithm. 
    } 
} 
} 

Damit die kurzen Beitrag habe ich abgespeckte der Code. Wie ich oben gesagt habe funktioniert meine Sortierung, wenn sie im MyList_ColumnClick Event notiert ist.

Was ich tun wollte ist, meinen Sortiercode in eine Klasse zu setzen (ich komme aus C++; dort würde es eine Funktion genannt werden) und es aufrufen, wenn es benötigt wird.

Daher muss ich irgendwie die MyList an SortBy übergeben, um daran arbeiten zu können, oder für SortBy verfügbar machen.

Modifiers Eigenschaften von MyList sind auf public eingestellt. Ich habe auch internal getestet, aber es hat nicht funktioniert.

In C++ würde ich meine Funktion anrufen und mir geht es gut. Aber ich weiß nicht, wie ich damit in C# umgehen soll.

+0

Sie müssen etwas Code teilen. Ansonsten ist es eine Art Wunder, um die richtige Antwort zu finden :) z. Sie könnten die 'ListView' als Eingabeparameter für die Sortiermethode angeben. ... –

Antwort

0

Angesichts Ihrer Bezugnahme auf das, was Sie in C++ getan hätten, gehe ich davon aus, dass Ihr Problem darin besteht, dass es in C# keine "globalen" Funktionen gibt. Das heißt, alle Funktionen müssen Klassenmitglieder sein. Wenn Sie eine solche globale Funktion benötigen, können Sie sie statisch machen, so dass Sie keine Klasseninstanz benötigen, um sie aufzurufen. Wenn Sie also public static void Sorting() hatten, könnten Sie SortBy.Sorting() aufrufen. Alternativ könnten Sie Ihren Wert als Parameter von Sorting() übergeben.

+0

Hallo Ian, danke für deinen Beitrag. Der Aufruf von 'Sorting()' funktioniert, aber 'MyList' ist der Klasse' SortBy' noch unbekannt. Allerdings ist mein Algorithmus davon abhängig, Zugriff auf 'MyList' zu haben. Wie wenn ich Gegenstände untereinander tausche oder Gegenstände hinzufüge/entferne. – SUM

+0

Ich denke, ich habe es! Vielen Dank. Ich übergab die ViewList von Form1 nach Parameter zu einem, ich nenne es Klon und sortiere diesen Klon. Ich denke, der nächste Schritt besteht darin, den jetzt sortierten Klon wieder zu Form1 zurückzugeben. Ich werde es versuchen. – SUM

+0

Es funktioniert Ich rufe es von Form1: 'SortBy.Sorting (MyList)'. In der Klasse 'Sortierung' verwende ich' public static ... Sorting (ListView MyList) 'und dann kann ich ohne Probleme meinen Alorithmus laufen lassen. Vielen Dank an dich, Ian! – SUM

Verwandte Themen