2017-01-30 3 views
0

Ich habe zwei Schaltflächen erstellt ("Move Top" und "Move Bottom") und ich muss sie wie folgt arbeiten lassen. wenn ich auf ein Element von einer ListBox klicke (zum Beispiel, wenn wir die Artikel haben: 1. Katze, 2. Hund, 3. Vogel, 4. Dinosaurier und 5. Phoenix in der ListBox) geht es direkt auf die oben oder unten.Wie verschiebt man ein Element oben (und unten) einer ListBox in C#?

Lassen Sie uns sagen, dass ich das Element Dinosaurier an der Spitze meiner ListBox, und das Element Hund bewegen wollen - nach unten. Wie kann ich es zum Laufen bringen? Nochmal - ich sollte es funktionieren lassen, indem ich es direkt nach oben/unten verschiebe.

PS: Es ist mein erster Tag hier, um mich so entschuldigen, wenn meine Frage nicht klar genug ist :)

+1

Was benutzen Sie? WPF, WinForms, ASP.NET, ASP.MVC – trebor

+0

Ich verwende Windows Forms –

+0

Mögliches Duplikat von [C# Element in Listbox an den Anfang verschieben] (http://stackoverflow.com/questions/28309764/c-sharp-move -item-in-listbox-to-the-top) – Sinatr

Antwort

1

Wenn Sie ein Element in einer ListBox an Position 0 (Start) verwenden Sie können eingefügt werden soll:

ListBox c = new ListBox(); 
string item="Some string"; 
c.Items.Insert(0, item); //added as first item in Listbox 

, wenn Sie wollen, dass es am Ende des listbox Verwendung einzufügen:

c.Items.Add(item); //add at the end 
0

Angenommen, Sie MVVM verwenden und Binden eines ObservableCollection zu Ihrem ListBox.

Sie können den Index des SelectedItem mit IndexOf abrufen und die Methode Move von ObservableCollection verwenden.

public void Move(int oldIndex, int newIndex) 
0

Wollen Sie etwas Ähnliches?

 public void MoveUp() 
    { 
     MoveItem(-1); 
    } 

    public void MoveDown() 
    { 
     MoveItem(1); 
    } 

    public void MoveItem(int direction) 
    { 
     // Checking selected item 
     if (yourListBox.SelectedItem == null || yourListBox.SelectedIndex < 0) 
      return; // No selected item - nothing to do 

     // Calculate new index using move direction 
     int newIndex = yourListBox.SelectedIndex + direction; 

     // Checking bounds of the range 
     if (newIndex < 0 || newIndex >= yourListBox.Items.Count) 
      return; // Index out of range - nothing to do 

     object selected = yourListBox.SelectedItem; 

     // Removing removable element 
     yourListBox.Items.Remove(selected); 
     // Insert it in new position 
     yourListBox.Items.Insert(newIndex, selected); 
     // Restore selection 
     yourListBox.SetSelected(newIndex, true); 
    } 
0

Dies sollte den Trick tun.

public void MoveToTop(ListBox lb, int index) { 
    var item = lb.Items[index]; 
    lb.Items.RemoveAt(index); 
    lb.Items.Insert(0, item); 
    lb.Refresh(); 
} 

public void MoveToBottom(ListBox lb, int index) { 
    var item = lb.Items[index]; 
    lb.Items.RemoveAt(index); 
    lb.Items.Add(item); 
    lb.Refresh(); 
} 
Verwandte Themen