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