2016-06-28 12 views
0

listViewをクラスに渡してソートする際に問題があります。私はlistViewを作成し、私はサブ項目(名前、日付、番号)を持つアイテムを追加Form1並べ替えリストをSortクラスに渡して並べ替え - C#

は私が私のプログラムのアイデアが何であるかを説明しましょう。

その後、ユーザーがクリックした列でアイテムを並べ替えるColumnClickイベントを作成しました。 listViewがで作成されたとして、それは同じ形をしているとき

私のソートアルゴリズムが正常に動作します。

私のコードを作るために、私は別のC#ファイルに私のソートアルゴリズムを譲渡することを決定し、より良い読めます(SortBy.csと呼ぶことができます)。 ColumnClickイベントは、ソートアルゴリズムを呼び出す必要があります。

しかし、VisualStudioをはSortBy.csに「名 『ListViewNAMEは、』私は、それぞれ公衆にlistViewプロパティ修飾子を変更したという事実にもかかわらず。現在のコンテキスト」に存在しないと言われます。

どうすればよいですこの問題を解決し、適切に私のSORTBYメソッドを呼び出す

を、私は私のプロジェクトからコードを抽出し、この目的のために、ここでそれだけで3つの項目が含まれてい

編集コードを追加しました:?。。

コードを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   
    } 


} 

コードSORTBYは:

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

削ぎ落とした後の短いIコードを維持するために。上記のように、私のソートはMyList_ColumnClickイベントで書かれていれば動作します。

私のやりたいことは、ソートコードをクラスに入れておくことです(私はC++から来ています;それは関数と呼ばれるでしょう)。

したがって、私は何らかの形でをSortByに渡す必要があります。それには、SortByで利用できるようにする必要があります。

ModifiersMyListのプロパティはpublicに設定されています。私もinternalをテストしましたが、うまくいきませんでした。

C++では関数を呼び出しても問題ありません。しかし、私はC#でこれをどのように処理するのか分かりません。

+0

いくつかのコードを共有する必要があります。そうでなければ、正解を見つけるのは一種の奇跡です。ソートメソッドの入力パラメータとして 'ListView'を与えることができます。 ... –

答えて

0

C++で行っていたことを参考にして、私は難しいと思っていますが、C#では「グローバル」な機能はありません。つまり、すべての関数はクラスメンバーでなければなりません。そのようなグローバル関数が必要な場合は、それを静的にすることができます。そのため、クラスインスタンスを呼び出す必要はありません。したがって、あなたがパブリックstatic void Sorting()を持っていれば、SortBy.Sorting()を呼び出すことができます。または、litstをSorting()のパラメータとして渡すこともできます。

+0

こんにちはイアン、あなたのポストに感謝します。 'Sorting()'を呼び出すと動作しますが、 'MyList'はまだクラス' SortBy'には未知です。しかし、私のアルゴリズムはMyListにアクセスする必要があります。私がお互いに交換したり、アイテムを追加/削除するときのように。 – SUM

+0

私はそれを得たと思う!どうもありがとうございました。 Form1からViewListをパラメータに渡し、クローンと呼び、クローンをソートします。次のステップは、今ソートされたクローンを再びForm1に戻すことです。私はそれを試してみます。 – SUM

+0

私はそれをForm1から呼び出します: 'SortBy.Sorting(MyList)'。 'Sorting'クラスでは、' public static ... Sorting(ListView MyList) 'を使用し、問題なくアライメントを実行できます。あなたに感謝して、イアン! – SUM

関連する問題