Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Listview - Comando por teclas [RESOLVIDO]

Dúvidas gerais sobre Excel
Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Listview - Comando por teclas [RESOLVIDO]

Mensagem por Rafa - Info »

Bom dia pessoal, criei um listview para fazer a transferencia selecionando do listview através de cliques para os textbox, ou seja, é possivel clicando em uma linha ele enviar para os textbox e etc...mas algo que preciso é se há possibilidade de que quando eu utilizo as setas do teclado no listview entre as linhas ele também faça esta copia para os textbox's e não somente quando clicar??

Este é o código de quando eu clico ele copia para os textbox.

Código: Selecionar todos

Private Sub ListView1_click()
    Dim linha, Index

    'linha = ListView1.ListItems(Index).ListSubItems(4).Text 'linha da plan
    Index = (ListView1.SelectedItem.Index) 'linha do ListView

    Me.TextBox1.Value = ListView1.ListItems(Index) '1ª coluna do ListView
    '2ª coluna do ListView
    Me.TextBox2.Value = ListView1.ListItems(Index).ListSubItems(1).Text
    '3ª coluna do ListView
    Me.TextBox3.Value = ListView1.ListItems(Index).ListSubItems(2).Text
    '4ª coluna do ListView
    Me.TextBox4.Value = ListView1.ListItems(Index).ListSubItems(3).Text

    'Me.TextBox1.SetFocus
    End Sub 

Agradeço a atenção de todos.
Editado pela última vez por Rafa - Info em Sex Mar 04, 2011 8:45 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Listview - Comando por teclas

Mensagem por Mauro Coutinho »

Rafa, se não me engano, para fazer da maneira que quer precisamos tirar o Focu do TextBox e deixa-lo no ListView :
Me.TextBox1.SetFocus

Veja se na rotina que inicia o Formulário tambem não tem esta chamada acima.

Assim que possivel posto um exemplo, faça o teste primeiro e depois retorne.

[]s


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Listview - Comando por teclas

Mensagem por joseA »

Bom dia,

Em um exemplo do meu arquivo apliquei as informações que obteve aqui:

http://social.msdn.microsoft.com/Forums ... 6d3ef6de34

as dicas do Mauro e deu certo, selecione uma linha e acesse as teclas...
Anexos
ListViewTeclas.zip
(18.12 KiB) Baixado 535 vezes


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Listview - Comando por teclas

Mensagem por joseA »

joseA escreveu:... e deu certo...
Desculpe-me mas cantei vitória antes da hora, testando melhor verifiquei que os dados carregados para os TextBox's são sempre da seleção anterior, como bem havia verificado o nosso amigo Rafa.

Bom, pelo menos há um caminho percorrido, seguiremos...


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Listview - Comando por teclas

Mensagem por joseA »

Em tempo...


Fazendo um "arremendo", acrescentando ao procedimento + 1 e - 1 nessas partes do procedimento obtemos um progresso considerável.

For i = 1 To ListView1.ListItems.Count
If KeyCode = vbKeyDown And ListView1.ListItems(i).Selected = True Then

Index = (ListView1.SelectedItem.Index) + 1 'linha do ListView

e

ElseIf KeyCode = vbKeyUp And ListView1.ListItems(i).Selected = True Then

Index = (ListView1.SelectedItem.Index) - 1 'linha do ListView


Mas não fiz muitos testes...


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Listview - Comando por teclas

Mensagem por Mauro Coutinho »

José, aproveitando seu "ponta pé inicial", refiz algumas linhas e rotinas e acredito ter chegado ao pretendido.

Façam os teste e qq duvida ou Bug retornem.

[]s
Anexos
ListViewTeclas_Mauro.rar
ListView por Teclas
(21.41 KiB) Baixado 479 vezes


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Listview - Comando por teclas

Mensagem por joseA »

E aí Mauro,

Parabéns pela solução. Só não entendí como conseguistes "driblar" o fato de os dados carregados para os TextBox's serem sempre da seleção anterior e quando acessa o 1º ou último registro dava erro.

Segue uma alternativa (consegui "driblar" também os erros), verifique uma outra maneira de selecionar a 1ª linha no anexo e aqui uma maneira de selecionar a última linha.

Código: Selecionar todos

' exemplo, para seleccionar e ver a última linha de um ListView.
ListView1.ListItems(ListView1.ListItems.Count).EnsureVisible
    ListView1.ListItems(ListView1.ListItems.Count).Selected = True
    ListView1.SetFocus 
Anexos
ListViewTeclasOK.zip
(19.99 KiB) Baixado 435 vezes


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: Listview - Comando por teclas

Mensagem por Rafa - Info »

Pessoal, vocês não vão acreditar, hoje desde cedo estava suando a camisa literalmente, ficando louco com esta questão e joseA, vocês não vão acreditar que tive o mesmo raciocinio do + 1 e -1.

Segue o arquivo que fiz, colocando dentro do parênteses do index.....

Mas o do Mauro ficou show !!! Eu tentei colocar desta forma que ele fez mas não estava me entendendo com o "selected".

Pelo que eu entendi, ali foi crucial a condição For e no If indicando a linha selecionada.

Nem acessei a net hoje, minha esposa que viu inclusive agora pouco e entrei para postar.

Ficou 100% galera. Bom d++ o resultado.

Baixem o arquivo que estou disponibilizando tb, foi meio um remendo mas funcionou igual o do Mauro, claro que o do Mauro é o mais correto. Depois fazem uma limpeza nele....deixei vários testes que fiz nestes dias.....

Mauro outro detalhe legal para o listview ficar sem a possibilidade de manipulação dentro dele é retirando o LabelEdit deixe Manual, assim quando se clicar em qualquer linha da primeira coluna (4 cliques pelo teste que fiz ou um clique direto na primeira linha da primeira coluna) ele não abre para edição.

Abs.
Anexos
ListViewTeclas_Rafa.rar
(26.39 KiB) Baixado 500 vezes


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: Listview - Comando por teclas

Mensagem por Rafa - Info »

Na verdade não entendi o que o Mauro fez para que ele não pegasse a seleção anterior, apesar de estar meio cansado, revendo aqui parece que o keydown dele está igual o meu...

Depois se ele puder explicar para nós....

Abs.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Listview - Comando por teclas

Mensagem por Mauro Coutinho »

Antes de mais nada, agradeço as considerações, mas como eu já citei anteriormente, sem o "ponta pé incial" de vocês, provavelmente eu não teria conseguido, dei uma olhada rápida nos novos anexos e estão show de bola tambem, por isso que adoro VBA, ele nos permite chegar a um único resultado por diversas formas, e é como dizem "A ordem dos fatores, não altera o produto", acho que é isso, nem me lembro mais aonde escutei isso, rsrsrsrs.

Quanto a rotina no Evento KeyDown, o Rafa está com a razão, não foi alterado nadinha, só fiz uma limpa na mesma, alias essa é uma das primeiras coisa que costumo fazer, analizar se tem referencias e controles não declarados ou desabilitados e ir eliminando, fica mais fácil de percorrer a mesma e entender o que está se fazendo.

Quanto ao meu anexo, algumas das alterações foram :
Primeiro eu tirei todas as linhas que davam o Focu ao TextBox1,
Eliminei a rotina Private Sub ListView1_click()
Readequei a Rotina Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

Criei uma nova rotina - Sub PrimeiroItem() - para forçar a Seleção do Primeiro Item ao iniciar o Formulário, e coloquei a chamada para a mesma na rotina Sub PreencherListView(), assim ao ser selecionado o item os TextBox são preenchidos ao iniciar o Formulário, não tendo a necessidade de se clicar antes em algum Item.

Basicamente, foi isto, alem de eliminar todas as rotinas e linhas desnecessárias, e uma coisa que não consegui acertar, mas isto vai ficar para uma outra oportunidade, e vou deixar vocês quebrando a cabeça por mim é a questão de realçar com formatação os itens selecionados igual a versão original.

Por hora é só, assim que der dou uma olhada mais detalhada nos novos anexos, e mais uma vez, parabens aos colegas pelo esforço e dedicação tambem, é essa força de vontade que nos motiva a ir sempre alem das nossas possibilidades e fazer deste Forum um dos melhores atualmente.

abraços


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder