WINFORMS - MOUSE SCROLL

LUIS.HERRERA 19/03/2014 17:20:29
#436263
Gente boa tarde.
Me deparei com um problema e não estou achando solução.

Tenho forms com combobox. Tudo ok, porém se um combo tem o foco e eu rolo o scroll do mouse ele muda o item selecionado no combo, porém não dispara o evento TextChange do combo que tem ações necessárias.

Como eu posso evitar que o scroll do mouse altere o combo, ou se não for possível, tem como ao mudar o texto do combo (pelo scroll do mouse) acionar o evento TextChange desse combo?
NILSONTRES 19/03/2014 19:14:36
#436265
Ve se isso te ajuda, pelo menos trava o scroll e mantem o index.

Private Sub ComboBox2_MouseWheel(sender As Object, e As MouseEventArgs) Handles ComboBox2.MouseWheel
ComboBox2.SelectedIndex = -1
End Sub
OCELOT 19/03/2014 20:10:32
#436266
Se é um combobox em que apenas se pode escolher um item e não digitar diretamente nele então você deveria usar o event SelectedIndexChanged
LUIS.HERRERA 20/03/2014 09:02:00
#436281
Ocelot nos combobox podem ser tanto selecionados os como digitados, mas só aceita os itens na lista.

Nilson nesse caso que citou, você obriga o index a ser sempre -1 (igual sem seleção de item) e não é isso. O item foi selecionado ou digitado, o que não quero é que o scroll interfira nisso, ou seja, não altere a seleção do combo já feita pelo usuário.

O ideal seria desativar o scroll só nos combos e não num textbox por exemplo. Porém não achei nenhum evento no combo que trate disso e no C# 2008 não existe MouseWheel para combobox.

Nota: Vários combos, ao ser alterado o conteúdo do combo, aciona o carregamento de dados em outros controles. O scroll só muda no combo e não dispara o evento TextChange do combo, responsável pelas demais atualizações.
NILSONTRES 20/03/2014 12:04:22
#436290
Citação:

Nilson nesse caso que citou, você obriga o index a ser sempre -1


Em meus testes ele não fez isso, e sim manteve a combo com o seu valor selecionado.
Embora foi pedido -1, curioso, mas fez o que vc precisa.
LUIS.HERRERA 20/03/2014 12:13:58
#436292
Mas não existe MouseWheel para combobox no C# 2008 (Windows Forms).
NILSONTRES 20/03/2014 13:10:25
#436294
LUIS HERRERA,
Desculpe me intrometer.
Tudo Indica que você terá problemas se não atualizar o visual Studio, me lembro que já teve com a versão do Crystal, sua empresa não pensa em atualizar ?
GUIMORAES 20/03/2014 15:01:06
#436297
Luiz.
Você pode utilizar o evento SelectedValueChanged ou LostFocus.
LUIS.HERRERA 20/03/2014 16:54:41
#436307
Nilson se todo problema que se tem de programação fosse resolvido com compra de nova versão. O desconhecimento (meu) sobre um assunto, não quer dizer que seja necessário uma nova versão da IDE para resolver, pois tudo que se faz com uma versão anterior, de consegui até mais fácil, ou deveria, com as versões posteriores.

Só como comentário, esse evento MouseWell só está disponível em código, não pode ser acessado na aba de eventos do design time, que coisa!

Vou ver a dica do Guimoraes também e ver qual fica melhor ou resolve.


Nota: O problema que tive com Crystal Report felizmente foi solucionado, depois de 1 semana pesquisando, consegui solucionar adaptando com algumas dicas em sites diferentes. Tinha um [Ô]segredinho[Ô] no versão 2008 que não era necessário nas versões anteriores, pois se mudou estrutura e tipos de campos.

O grande problema que ví até o momento com o Crystal Report é que para cada versão dele, as coisas são feitas de uma forma diferente, então isso complica muito, sendo uma ferramenta complexa e [Ô]Chata[Ô] para se dar manutenção. Trocar de versão implica em muitas vezes refazer várias coisas nela.

Muito obrigado por enquanto a todos.
LUIS.HERRERA 27/03/2014 10:44:07
#436577
Amigos bom dia.

Depois de procurar muito e quase desistir, hoje na 7 página de resultados do Google, consegui achar a solução explicada e funcionando. Abaixo o código que implementei para resolver o problema.

Crie o método publico
public static void meuCombo_MouseWheel(object sender, MouseEventArgs e)
{
((HandledMouseEventArgs)e).Handled = true;
}

No load do form que tem os combos faça isso para cada combo
this.Combo_1.MouseWheel += new MouseEventHandler(meuCombo_MouseWheel);
this.Combo_2.MouseWheel += new MouseEventHandler(meuCombo_MouseWheel);
//etc...


Nota: Isso é necessário porque os combos no VS 2008 tem o type MouseWheel na linha de código, mas não na janela de eventos do DesingTime para associar.

Mais um PROBLEMA VS 2008 [[ Resolvido ]]
Tópico encerrado , respostas não são mais permitidas