EXECUTAR 2 VEZES O MESMO BOTÃO...
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!
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!
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
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
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 ?
talvez utilizando esse flag resolva... mas teria que fazer isso em todos os botões...
alguém teria outra ideia do que fazer ?
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
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
A solucao menos pior ainda acredito ser de desabilitar o botao ao clicar e so habilitar ao fim da execucao
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
se não , error, como a solução do Warz mais acima
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.
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...
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
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...
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.
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.
Tópico encerrado , respostas não são mais permitidas