EXECUTAR 2 VEZES O MESMO BOTÃO...

FERDEAD 03/06/2015 18:25:26
#447364
Olá !

acontece comigo direto essa situação... como vocês resolvem ?

Por exemplo, eu crio um botão e coloco todo o código que desejo nele...

ai, geralmente o usuário que tem um mouse ruim, ele vai lá e dá um clique, e pega um clique duplo no botão...
quando o usuário faz isso, por exemplo, se é um botão para preencher alguma tabela que leva um certo tempo de processamento, ele executa o primeiro clique, e executa o segundo clique junto.. ai [Ô]buga[Ô] todo o código... tem alguma forma de resolver isso? tipo, executar todo o código do primeiro clique, e depois executar todo o código do segundo clique ?

obrigado!
JABA 03/06/2015 18:45:52
#447367
Você pode trocar o evento de click para duplo-cliclk no botão, isso ja resolveria o seu problema.

Uma outra alternativa é desabilitar o botão no primeiro clique e habilitá-lo quando concluir a rotina.

Você poderia também criar um flag para toda a rotina. Ex:

dim flag as boolean

if flag = true then
executeRotina
flag=false
end if

FERDEAD 03/06/2015 21:54:59
#447379
bom, não quero trocar para click duplo, pois o normal é 1 clique.. só que se por exemplo, uma pessoa sem paciência aperta o botão 2 vezes enquanto está em processamento, ele vai executar as 2 vezes junto e faz tudo errado...

talvez utilizando esse flag resolva... mas teria que fazer isso em todos os botões...

alguém teria outra ideia do que fazer ?
WARZ 04/06/2015 00:44:12
#447384
Eu não sei o que esse botão faz exatamente, mas vou dar um exemplo.

Digamos que tem uma textbox ao clicar no botão gera uma mensagem dizendo o que esta escrito no textbox, Pode adaptar de acordo com seu projeto.

=============================

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text = [Ô][Ô] Then [ô]Se a textbox1 estiver vazia[ô]
MsgBox([Ô]Erro, a caixa não pode estar vazia[Ô]) [ô]Mensagem de erro impedindo um duplo click[ô]

Else [ô]Se não estiver vazia[ô]

MsgBox(TextBox1.Text) [ô]Executa a mensagem com o que tem escrito dentro da textbbox1[Ô]

End If
End Sub
End Class



NICKOSOFT 04/06/2015 05:48:04
#447385
A solucao menos pior ainda acredito ser de desabilitar o botao ao clicar e so habilitar ao fim da execucao
XLEGENDARY 04/06/2015 10:16:01
#447387
Tratamento de exceções amigo o procedimento só executa se e somente se estiver tudo correto
se não , error, como a solução do Warz mais acima



NILSONTRES 04/06/2015 10:39:42
#447388
Desabilitar ao iniciar a rotina, habilitar ao termino da rotina, isso em cada controle, não só botões, mas em cada controle utilizado, isso é praxe.
FERDEAD 05/06/2015 13:24:34
#447431
pois é.. eu dei exemplo de 1 botão, mas por exemplo, tem um textbox que abre cupom no meu pdv, e se por exemplo o usuário de 2 enter rápido, ele abre o cupom 2 vezes... pensei que tivesse algum comando ou propriedade para executar a rotina somente após o término dela mesma, ou de outra qualquer...
XLEGENDARY 05/06/2015 13:29:11
#447432
Não sei como vc abre o seu cupom mas vc pode verificar se ele está aberto ou não assim como se faz em forms
FERDEAD 05/06/2015 14:55:54
#447434
eu faço essa verificação... mas o usuário sempre vai dar um jeito de dar 2 enter pra abrir o cupom.. por exemplo, as vezes pode dar um lag na rede, e o usuário não sabe esperar, ai fica apertando enter até abrir... e nesse caso.. o código é executado várias vezes... mas, independentemente do caso, isso é só um exemplo, eu queria saber se tinha algo para bloquear o código de ser executado no meio dele mesmo... imaginamos.. o cupom está fechado.. ele aperta 2 enter para abrir o cupom (o vb aguarda o último comando do primeiro enter terminar) ai o cupom vai estar aberto, e no segundo enter, iria aparecer a mensagem o cupom está aberto... só que não é assim que funciona...
XLEGENDARY 05/06/2015 15:51:22
#447436
pra uma maquina trabalhar assim com vb , sendo o 6 ou não ela deve ser bem lerdinha heim ? ^^
creio que nesse seu caso é melhor sumir com o controle que está fazendo a rotina, porém no caso se houver algum travamento o hide não terá efeito esperado, ja que ele irá travar primeiro pra depois dar o hide e ai o user ja apertou enter varias vezes. Um outro modo seria por com duplo toque ao invés de um, talvez assim não daria tempo de o usuario apertar 4 vezes ( pois ai seu tratamento ja estaria rodando )
enfim vc tem que analisar a melhor forma, creio que no meio do código vc teria que por um keypress a fim de detectar, mas ai vc teria que ter uma rotina que faria todo o caminho inverso do enter.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas