![]() |
Hoje veremos como podemos rearranjar os itens em um controle ListBox usando C#. |
No exemplo apresentando iremos exibir itens em um ListBox e permitir que o usuário selecione um item e usando botões de comando será possível rearranjar a posição do item na lista para cima e/ou para baixo.
Vamos la´...
recursos usados:
Criando o projeto Windows Forms no VS 2019 Community
Abra o VS 2019 e no menu File clique em New Project e selecione o template : Aplicativo do Windows Forms(.NET Framework) e clique em Próximo:
Informe o nome CShp_ListBox1 e clique em Criar.
No formulário Form1.cs inclua um controle ListBox alterando o seu nome para lstbLinguagens e a seguir inclua 5 buttons : btnTopo, btnAcima, btnAbaixo e btnBase dispondo os controles no formulário conforme a figura abaixo:
Para incluir os itens no listbox vamos usar a propriedade Items e na janela do Editor de Coleção vamos incluir os nomes das 20 linguagens de programação mais usadas:
Agora vamos definir o código do formulário:
1- Quando o
usuário selecionar um item do ListBox no evento
SelectedIndexChanged temos o código que vai
habilitar e desabilitar os botões apropriados:
private void lstbLinguagens_SelectedIndexChanged(object sender, EventArgs e)
{
btnAcima.Enabled = (lstbLinguagens.SelectedIndex > 0);
btnTopo.Enabled = btnTopo.Enabled;
btnAbaixo.Enabled = (lstbLinguagens.SelectedIndex < lstbLinguagens.Items.Count - 1);
btnBase.Enabled = btnAbaixo.Enabled;
}
|
Se o índice
selecionado for maior que 0 (o primeiro item possui o índice 0), o
item não estará no topo da lista. Nesse caso, o código ativa os botões Mover
para cima e Mover o topo.
Se o índice selecionado for menor que o número de itens menos um (o
último item possui o índice
lstbLinguagens.Items.Count
- 1), o item não estará no final da lista. Nesse caso, o código ativa os
botões Mover para baixo e Mover para a base.
Depois de
mover o item, o botão o seleciona. Isso é menos confuso do que não deixar
nenhum item selecionado, permite que o usuário clique nos botões várias
vezes para mover o item repetidamente e garante que o item permaneça visível
se sair da parte inferior ou superior da lista visível.
A abordagem básica que cada botão usa para mover o item selecionado é a
mesma: salve o índice do item, se necessário, salve o item, remova o item do
listbox e insira o item em sua nova posição.
A seguir o código de cada botão de comando :
1- Move o item para o Topo da
lista
private void btnTopo_Click(object sender, EventArgs e) { object item = lstbLinguagens.SelectedItem; lstbLinguagens.Items.RemoveAt(lstbLinguagens.SelectedIndex); lstbLinguagens.Items.Insert(0, item); lstbLinguagens.SelectedIndex = 0; } |
2- Move o item para cima na lista
private void btnAcima_Click(object sender, EventArgs e)
{
int index = lstbLinguagens.SelectedIndex;
object item = lstbLinguagens.SelectedItem;
lstbLinguagens.Items.RemoveAt(lstbLinguagens.SelectedIndex);
lstbLinguagens.Items.Insert(index - 1, item);
lstbLinguagens.SelectedIndex = index - 1;
}
|
3- Move o item para baixo na lista
private void btnAbaixo_Click(object sender, EventArgs e)
{
int index = lstbLinguagens.SelectedIndex;
object item = lstbLinguagens.SelectedItem;
lstbLinguagens.Items.RemoveAt(lstbLinguagens.SelectedIndex);
lstbLinguagens.Items.Insert(index + 1, item);
lstbLinguagens.SelectedIndex = index + 1;
}
|
4- Move o item para a base da
lista
private void btnBase_Click(object sender, EventArgs e)
{
object item = lstbLinguagens.SelectedItem;
lstbLinguagens.Items.RemoveAt(lstbLinguagens.SelectedIndex);
lstbLinguagens.Items.Add(item);
lstbLinguagens.SelectedIndex = lstbLinguagens.Items.Count - 1;
}
|
5- Encerra o projeto
private void btnEncerrar_Click(object sender, EventArgs e)
{
Application.Exit();
}
|
Executando o projeto teremos o resultado a seguir:
Pegue o
projeto completo aqui:
WF_ListBox1.zip
"Bendito seja o Deus e Pai de nosso Senhor Jesus
Cristo, o Pai das misericórdias e o Deus de toda a consolação;
Que nos consola em toda a nossa tribulação, para que também possamos
consolar os que estiverem em alguma tribulação, com a consolação com que nós
mesmos somos consolados por Deus."
2 Coríntios 1:3,4
Referências:
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Usando Listas com elegância - Macoratti
C# - Trabalhando com Coleções Genéricas do tipo List(<T>)
C# - Diferentes maneira de criar uma lista de objetos - Macoratti
C# - Acessando dados de um dicionário ordenado - Macoratti
C# - Usando um Dicionário para armazenar e ... - Macoratti
C# - Escolhendo a coleção correta para sua ... - Macoratti