2

ヘルプを探しています。同じリスト ボックスにデータを追加し、それらを要約として表示する 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

このようなものを試すことができます。次のコードは、mainListBox という名前の ListBox、upButton という名前のボタン、および downButton という名前のボタンを含む Windows フォームを想定しています。

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 に答える