Fogo programaticamente Evento ListView.SelectedIndexChanged?
-
03-07-2019 - |
Pergunta
Como pode um programaticamente acionar o evento SelectedIndexChanged de um ListView?
Eu tenho pretendido para o primeiro item no meu ListView para automaticamente se tornar selecionados depois que o usuário completa uma determinada ação. Código já existe dentro do evento SelectedIndexChanged para destacar o item selecionado. Não só o item não seja realçado, mas um conjunto de ponto de interrupção dentro SelectedIndexChanged nunca é atingido. Além disso, uma Debug.WriteLine não consegue saída de produtos, por isso estou bastante certo de que evento não foi acionado.
O código a seguir não dispara o evento:
listView.Items[0].Selected = false;
listView.Items[0].Selected = true;
listView.Select();
Application.DoEvents();
A chamada de método extra de .Select () foi incluído para uma boa medida. ;) O deselection (.selected = false) foi incluído para desmarcar o ListViewItem na coleção .Items apenas no caso que pode ter sido selecionado por padrão e, portanto, definindo-o como 'verdadeiro' não teria nenhum efeito. Dos Application.DoEvents () "chamada é mais um último método vala.
não deve o código acima causa o evento SelectedIndexChanged ao fogo?
Eu devo mencionar que os incêndios evento SelectedIndexChanged corretamente em quando um item é selcted através da entrada de teclado ou mouse.
Solução
Ao desmarcar-lo, definindo-o como false não irá disparar o evento, mas defini-la como verdadeira vontade.
public Form1 ()
{
InitializeComponent();
listView1.Items[0].Selected = false; // Doesn't fire
listView1.Items[0].Selected = true; // Does fire.
}
private void listView1_SelectedIndexChanged (object sender, EventArgs e)
{
// code to run
}
Você pode ter algo mais acontecendo. O evento que você está executando o seu código de seleção?
Outras dicas
Por que você não pode mover o código que está atualmente dentro do método do seu manipulador de eventos para um método que pode ser chamado a partir do local original e também do seu código?
Algo parecido com isto:
class Foo
{
void bar(Object o, EventArgs e)
{
// imagine this is something important
int x = 2;
}
void baz()
{
// you want to call bar() here ideally
}
}
seria reformulado para isso:
class Foo
{
void bar(Object o, EventArgs e)
{
bop();
}
void baz()
{
bop();
}
void bop()
{
// imagine this is something important
int x = 2;
}
}
Se você criar uma classe derivada de ListView
, você pode chamar o método protegido OnSelectedIndexChanged
. Isto irá acionar o evento SelectedIndexChanged
.