How to allow user to change list box order

拜拜、爱过 提交于 2019-12-11 01:43:49

问题


I am looking for help, I have two lists that both add data to the same list box and it displays them as a summary, I would like to know how to let the user move an index up or down in the list box.

Items are added here

   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
    }

and this

 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
    }

This is the same for my other class, So any help would be appreciated


回答1:


You can try something like this. The following code assumes a Windows form containing a ListBox named mainListBox, a button named upButton, and a button named 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;
        }
    }
}

This will only work if you are adding items to the ListBox using the ObjectCollection.Add method. If you are data binding, you can update the actual data source and use the ListBox's BindingContext to refresh.

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();
}


来源:https://stackoverflow.com/questions/13714837/how-to-allow-user-to-change-list-box-order

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!