c#上下移动列表框中的项目
我有一个windows窗体应用程序,它有一个显示内容的列表框,我想在单击按钮时能够上下移动列表框中的项目。此时,列表框中的项目存储在文本文件中,当应用程序启动时,文本文件将加载到配置类中。如何上下移动项目并更改文本文件中的顺序 我的主要申请表格代码:c#上下移动列表框中的项目,c#,.net,c#-4.0,C#,.net,C# 4.0,我有一个windows窗体应用程序,它有一个显示内容的列表框,我想在单击按钮时能够上下移动列表框中的项目。此时,列表框中的项目存储在文本文件中,当应用程序启动时,文本文件将加载到配置类中。如何上下移动项目并更改文本文件中的顺序 我的主要申请表格代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace company1
{
public partial class Form1 : Form
{
List<Configuration> lines = new List<Configuration>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
//Read in every line in the file
using (StreamReader reader = new StreamReader("file.txt"))
{
string line = reader.ReadLine();
while (line != null)
{
string[] array = new string[] { "\\n" };
string[] parts = new string[3];
parts = line.Split(array, StringSplitOptions.RemoveEmptyEntries);
lines.Add(new Configuration(parts[0], int.Parse(parts[1]), int.Parse(parts[2])));
line = reader.ReadLine();
}
}
listBox1.DataSource = lines;
listBox1.DisplayMember = "CompanyName";
}
}
}
感谢您的帮助,几天来我们一直在努力让它正常工作 您可以为列表定义扩展方法,以便根据索引移动项目:
// change the items in source list
var tmpLine = lines[10];
lines[10] = lines[9];
lines[9] = tmpLine;
// refresh datasource of listbox
listBox1.DataSource = null;
listBox1.DataSource = lines;
public static class ExtensionClass
{
public static void Move<T>(this List<T> list, int index1, bool moveDown = true)
{
if (moveDown)
{
T temp = list[index1];
list[index1] = list[index1 + 1];
list[index1 + 1] = temp;
}
else
{
T temp = list[index1];
list[index1] = list[index1 - 1];
list[index1 - 1] = temp;
}
}
}
我是否将扩展方法放在配置类或主程序中?您可以将扩展方法放在所有代码都可以使用的任何类中,它是一个泛型方法,将在所有类型的列表中工作。我不确定您的配置类,但是如果它在代码中是可用的,您可以将它放在那里。如果你把它放在主程序中,那么它可能只对那个特定的名称空间可用。我一直收到一个错误:(错误1扩展方法必须在顶级静态类中定义;扩展类是嵌套类)正在联机查找,试图找到it@Raphael1,不要把这个类放在一个类中,只需为它创建一个单独的类文件并将其放入其中。
public static class ExtensionClass
{
public static void Move<T>(this List<T> list, int index1, bool moveDown = true)
{
if (moveDown)
{
T temp = list[index1];
list[index1] = list[index1 + 1];
list[index1 + 1] = temp;
}
else
{
T temp = list[index1];
list[index1] = list[index1 - 1];
list[index1 - 1] = temp;
}
}
}
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine("Original List");
foreach (int i in list)
{
Console.Write(i + ",");
}
Console.WriteLine(Environment.NewLine + "Move Index 2 Down");
list.Move(2);
foreach (int i in list)
{
Console.Write(i + ",");
}
Console.WriteLine(Environment.NewLine + "Move Index 3 Up");
list.Move(3, false);
foreach (int i in list)
{
Console.Write(i + ",");
}
Original List
1,2,3,4,5,6,7,
Move Index 2 Down
1,2,4,3,5,6,7,
Move Index 3 Up
1,2,3,4,5,6,7,