Click here to Skip to main content
Click here to Skip to main content
Go to top

Moving listbox items

, 26 Mar 2008
Rate this:
Please Sign up or sign in to vote.
Move lisbox items and change indices.

Introduction

This solution helps with a small but sometimes irritating problem, which may cause time loss when working on large projects. It moves listbox items up and down on the click of a button.

Using the code

First off, add a button or two, depending on what you want to achieve, to your form and set this code to the up button action:

if (listBox1.SelectedItems.Count > 0)
{
    object selected = listBox1.SelectedItem;
    int indx = listBox1.Items.IndexOf(selected);
    int totl = listBox1.Items.Count;

    if (indx == 0)
    {
        listBox1.Items.Remove(selected);
        listBox1.Items.Insert(totl - 1, selected);
        listBox1.SetSelected(totl - 1, true);
    }
    else{
        listBox1.Items.Remove(selected);
        listBox1.Items.Insert(indx - 1, selected);
        listBox1.SetSelected(indx - 1, true);
    }
}

And then, add this to the down button action:

if (listBox1.SelectedItems.Count > 0)
{
    object selected = listBox1.SelectedItem;
    int indx = listBox1.Items.IndexOf(selected);
    int totl = listBox1.Items.Count;

    if (indx == totl - 1)
    {
        listBox1.Items.Remove(selected);
        listBox1.Items.Insert(0, selected);
        listBox1.SetSelected(0, true);
    }
    else{
        listBox1.Items.Remove(selected);
        listBox1.Items.Insert(indx + 1, selected);
        listBox1.SetSelected(indx + 1, true);
    }
}

Points of Interest

For even better usability, the buttons can be disabled by default, and can be enabled when an item is selected. Furthermore, I hope this code will come in handy!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

privately voided()

South Africa South Africa
No Biography provided

Comments and Discussions

 
GeneralMy vote of 4 PinmemberMember 277166629-Oct-13 16:38 
Questionfollowing is smart code without any trouble: PinmemberJai Deo Tiwari22-Oct-13 21:21 
GeneralMy vote of 5 Pinmemberviragdesai16-Sep-12 18:58 
GeneralGreat Code Pinmembertim horigan20-Feb-11 9:38 
GeneralMy vote of 5 Pinmembertim horigan20-Feb-11 9:37 
GeneralMy vote of 2 PinmemberReymonARG13-Feb-10 18:48 
GeneralSlight issue with this example if duplicates exist in your list. PinmembertooMuchCode6-Nov-08 12:26 
This code does works fine as long as all of the values in the list are completely unique. However if you have more than one item in the list with the same text you will get unexpected results as the item removed isn't always the item you selected it may be the other copy of the same text. I found this out the hard way and after stumbling around for a while I figured out that if there is a chance of duplicate text you should use the ListBox1.RemoveAt();.
 
Here is the complete code I used: (Similar approach as this article illustrates but slightly different.)
 
private void btnMoveUp_Click(object sender, EventArgs e)
{
//Makes sure item is selected or else bypasses procedure to prevent error.
if (ListBox1.SelectedIndex >= 0)
{
//record orginal location and text.
Int32 iSelectedIndex = ListBox1.SelectedIndex;
string sSelectedItem = ListBox1.SelectedItem.ToString();
 
//determine new location.
Int32 iNewIndex = (iSelectedIndex - 1 => 0 ? 0 : iSelectedIndex - 1);
 
//remove item by index number since index number will always be unique.
ListBox1.Items.RemoveAt(iSelectedIndex);
//insert item with new index and orignal text .
ListBox1.Items.Insert(iNewIndex, sSelectedItem);

//Select item in new location.
ListBox1.SelectedIndex = iNewIndex;
}
}
 
private void btnMoveDown_Click(object sender, EventArgs e)
{
if (ListBox1.SelectedIndex >= 0)
{
Int32 iSelectIndex = ListBox1.SelectedIndex;
string sSelectedItem = ListBox1.SelectedItem.ToString();
 
Int32 iUpperLimit = ListBox1.Items.Count - 1;
 
Int32 iNewIndex = (iSelectIndex + 1 >= iUpperLimit ? iUpperLimit : iSelectIndex + 1);
 
ListBox1.Items.RemoveAt(iSelectIndex);
ListBox1.Items.Insert(iNewIndex, sSelectedItem);
 
ListBox1.SelectedIndex = iNewIndex;
}
}
 
I hope may example can save someone the hour of frustration and swearing I just went through. You all have a good day!
 
tooMuchCode
"sometimes when I close my eyes the code comes out of the shower head"

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140926.1 | Last Updated 26 Mar 2008
Article Copyright 2008 by privately voided()
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid