2

我正在寻求帮助,我有两个列表都将数据添加到同一个列表框中并将它们显示为摘要,我想知道如何让用户在列表框中向上或向下移动索引。

在此处添加项目

   private void BtnAddpickup_Click(object sender, EventArgs e)
    {
           /*
            * This method creates a new pickup object, allows the user to
            * enter details and adds it to the List
            *  
            */

        Pickupform.pickup = new Pickups();
        //New Visit- note added to the pickupform object

        Pickupform.ShowDialog();
        //Show the pickupForm. ShowDialog ensures that the form has the exclusive focus    until it is closed.

        if (Pickupform.pickup != null)
        //if null then the "cancel" button was pressed
        {
            Pickups newpic = Pickupform.pickup;
            //Get the Pickup object from the form

            thePickup.addPickups(newpic);
            //Add the visit to the list
        }
        updateList();
        //Update the list object to reflect the Pickups in the list
    }

和这个

 public Pickups getPickups(int index)
    {
        //Return the pickup object at the <index> place in the list

        int count = 0;
        foreach (Pickups pic in pickups)
        {
            //Go through all the pickup objects
            if (index == count)
                //If we're at the correct point in the list...
                return pic;
            //exit this method and return the current visit
            count++;
            //Keep counting
        }
        return null;
        //Return null if an index was entered that could not be found
    }

我的其他课程也是如此,所以任何帮助将不胜感激

4

1 回答 1

4

你可以尝试这样的事情。下面的代码假定一个 Windows 窗体包含一个名为 mainListBox 的 ListBox、一个名为 upButton 的按钮和一个名为 downButton 的按钮。

public partial class Form1 : Form
{
    private class Person
    {
        public string LastName { get; set; }

        public string FirstName { get; set; }

        public override string ToString()
        {
            return string.Format("{0}, {1}", LastName, FirstName);
        }
    }

    public Form1()
    {
        this.InitializeComponent();

        this.mainListBox.SelectionMode = SelectionMode.One;

        this.PopulateListBox();
    }

    private void PopulateListBox()
    {
        this.mainListBox.Items.Add(new Person() { FirstName = "Joe", LastName = "Smith" });
        this.mainListBox.Items.Add(new Person() { FirstName = "Sally", LastName = "Jones" });
        this.mainListBox.Items.Add(new Person() { FirstName = "Billy", LastName = "Anderson" });
    }

    private void upButton_Click(object sender, EventArgs e)
    {
        if (this.mainListBox.SelectedIndex > 0)
        {
            int selectedIndex = this.mainListBox.SelectedIndex;
            object selectedItem = this.mainListBox.SelectedItem;

            this.mainListBox.Items.RemoveAt(selectedIndex);
            this.mainListBox.Items.Insert(selectedIndex - 1, selectedItem);

            this.mainListBox.SelectedIndex = selectedIndex - 1;
        }
    }

    private void downButton_Click(object sender, EventArgs e)
    {
        if (this.mainListBox.SelectedIndex > -1 &&
            this.mainListBox.SelectedIndex < this.mainListBox.Items.Count - 1)
        {
            int selectedIndex = this.mainListBox.SelectedIndex;
            object selectedItem = this.mainListBox.SelectedItem;

            this.mainListBox.Items.RemoveAt(selectedIndex);
            this.mainListBox.Items.Insert(selectedIndex + 1, selectedItem);

            this.mainListBox.SelectedIndex = selectedIndex + 1;
        }
    }
}

这仅在您使用 ObjectCollection.Add 方法将项目添加到 ListBox 时才有效。如果是数据绑定,可以更新实际数据源,使用ListBox的BindingContext来刷新。

private List<Person> people = new List<Person>();

private void PopulateListBox()
{
    this.people.Add(new Person() { FirstName = "Joe", LastName = "Smith" });
    this.people.Add(new Person() { FirstName = "Sally", LastName = "Jones" });
    this.people.Add(new Person() { FirstName = "Billy", LastName = "Anderson" });

    this.mainListBox.DataSource = people;
}

private void upButton_Click(object sender, EventArgs e)
{
    if (this.mainListBox.SelectedIndex > 0)
    {
        int selectedIndex = this.mainListBox.SelectedIndex;
        Person selectedItem = this.mainListBox.SelectedItem as Person;

        this.people.RemoveAt(selectedIndex);
        this.people.Insert(selectedIndex - 1, selectedItem);

        this.mainListBox.SelectedIndex = selectedIndex - 1;

        this.RefreshListSource();
    }
}

private void RefreshListSource()
{
    CurrencyManager boundList = this.mainListBox.BindingContext[this.people] as CurrencyManager;
    boundList.Refresh();
}
于 2012-12-05T02:39:36.873 回答