排序listView通过传递给我的排序c#

本文关键字:排序 我的 listView | 更新日期: 2023-09-27 17:52:46

我有一个问题,传递一个listView类和排序它。

让我解释一下我的程序的思想:

Form1中,我创建了一个listView,并添加了带有子项(名称,日期,数字)的项。

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

我的排序算法在与创建listView的格式相同的情况下工作得很好。

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

然而,VisualStudio告诉我,在SortBy.cs"名称'ListViewNAME'不存在于当前上下文中"。尽管我已经分别将listView属性修饰符更改为public。

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

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

编辑代码添加:

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

为了保持文章简短,我简化了代码。就像我上面说的,如果在MyList_ColumnClick事件中写下来,我的排序确实有效。

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

因此,我必须以某种方式将MyList传递给SortBy才能对其进行处理,或者使其可用于SortBy

MyList

Modifiers属性设置为public。我也测试了internal,但它没有工作。

在c++中,我可以调用我的函数,然后就没事了。但是我不知道如何在c#中处理这个

排序listView通过传递给我的排序c#

考虑到你在c++中所做的事情,我假设你的困难是在c#中没有"全局"函数。也就是说,所有函数都必须是类成员。如果需要这样的全局函数,可以将其设置为静态,这样就不需要类实例来调用它。如果你有公共的静态void排序()你可以调用sortby .排序()。或者,您可以将您的litlist作为Sorting()的参数传递。