c#上下移动列表框中的项目

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

我有一个windows窗体应用程序,它有一个显示内容的列表框,我想在单击按钮时能够上下移动列表框中的项目。此时,列表框中的项目存储在文本文件中,当应用程序启动时,文本文件将加载到配置类中。如何上下移动项目并更改文本文件中的顺序

我的主要申请表格代码:

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,