通过将listView传递给我的Sort类来排序listView - c#

时间:2016-06-28 08:45:27

标签: c# class sorting listview methods

我将listView传递给某个类并对其进行排序时遇到问题。

让我解释一下我的计划的想法是什么:

Form1我创建了一个listView,我添加了子项目(名称,日期,数字)。

之后我创建了一个ColumnClick事件,该事件按用户点击的列对项目进行排序。

我的排序算法与创建listView时的格式相同,效果很好。

为了使我的代码更易读,我决定将我的排序算法转移到一个单独的C#文件(让我们称之为SortBy.cs)。然后ColumnClick事件应该调用排序算法。

但是,VisualStudio告诉我,在SortBy.cs中“当前上下文中不存在名称'ListViewNAME'。”尽管事实上我已经将listView属性修饰符分别更改为public。

如何解决此问题并正确调用我的SortBy方法?

我从项目中提取了代码。为此目的,它只包含三个项目。

编辑添加的代码:

代码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.
   }
}
}

为了保持帖子简短,我删除了代码。就像我上面所说的那样,如果在MyList_ColumnClick事件中写下来,我的排序就会起作用。

我想要做的是将我的排序代码放入一个类(我来自c ++;它将被称为函数)并在需要时调用它。

因此,我不得不将MyList传递给SortBy以便能够对其进行处理,或将其提供给SortBy

Modifiers的{​​{1}}属性设置为MyList。我还测试了public,但它没有用。

在C ++中,我会调用我的函数,我很好。但我不知道如何在C#中处理这个问题。

1 个答案:

答案 0 :(得分:0)

鉴于你提到你在C ++中所做的事情,我假设你的困难是在C#中没有“全局”函数。也就是说,所有函数都必须是类成员。如果需要这样的全局函数,可以将其设置为静态,这样就不需要类实例来调用它。因此,如果你有public static void Sorting(),你可以调用SortBy.Sorting()。或者,您可以将最小的作为Sorting()的参数传递。