Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Prblema con Application.DoEvents
mercoledì 04 maggio 2016 - 20.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
Windows 7
|
Visual Studio 2010
|
Access (.mdb)
Italo_vb6
Profilo
| Newbie
9
messaggi | Data Invio:
mer 4 mag 2016 - 20:43
Come ho già detto nel precedente thread, sto cercando convertire una mia applicazione da vb6 a vbNet.
Qualcuno sa dirmi perché per far intercettare l'evento in sub GestioneErrori devo premere uno dei due button due volte ???
Questo è il codice:
Private Sub GestioneErrori()
CkErrore = True
Risposta = ""
Beep()
LblMessaggio.Visible = True
BntNo.Visible = True
BntSi.Visible = True
DisabilitaPulsanti()
Do Until CkErrore = False
Thread.Sleep(5)
Application.DoEvents()
Loop
End Sub
_____________________________________________________________________________________________________________
Private Sub BntNo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntNo.Click
WsQuestion = False
Risposta = "No"
BntNo.Visible = False
BntSi.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub
_____________________________________________________________________________________________________________
Private Sub BntSi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntSi.Click
WsQuestion = False
Risposta = "Si"
BntNo.Visible = False
BntSi.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 5 mag 2016 - 09:05
ciao.
l'affermazione "perché per far intercettare l'evento in sub GestioneErrori devo premere uno dei due button due volte" è un poco ambigua e vedendo il codice l'unica anomalia (non so fino a che punto sia una anomalia oppure vuoi proprio che sia così) che noto è questa:
Nell sub GestisciErrore hai alla fine questo pezzo di codice
Do Until CkErrore = False
Thread.Sleep(5)
Application.DoEvents()
Loop
In pratica inizia un loop infinito fino a che non diventa a true la variabile 'CkErrore '
Il problema è che all'interno del blocco 'do until' non c'è niente che possa far cambiare il valore di CkErrore e uscire dal ciclo.
Dal codice che hai postato l'unico modo per uscire dal ciclo è cliccare su uno dei due bottoni.
Cristian Barca
Italo_vb6
Profilo
| Newbie
9
messaggi | Data Invio:
mer 11 mag 2016 - 14:42
Ciao AntCiar, scusa il ritardo ma ho avuto dei problemi......
Perché l'affermazione "perché per far intercettare l'evento in sub GestioneErrori devo premere uno dei due button due volte" è un poco ambigua ?
Cliccare due volte sul button significa proprio cliccare due volte ( la prima volta il programma non intercetta l'evento)
Hai capito bene; per uscire dal loop l'unico modo è cliccare su uno dei button ed è proprio questo che voglio.
Il problema e che i click sul button devono essere DUE.
Posto il codice completo per una maggiore comprensione.
Private Sub BntUscita_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntUscita.Click
ConfermaUscita()
If CkUscita Then
ChiudiConnessione()
End
End If
End Sub
Private Sub ConfermaUscita()
CkUscita = False
WsQuestion = True
LblMessaggio.Text = "Uscire dall'applicazione ?"
GestioneErrori()
If Risposta = "Si" Then
Risposta = ""
CkUscita = True
End If
End Sub
Private Sub GestioneErrori()
CkErrore = True
Risposta = ""
Beep()
LblMessaggio.Visible = True
If WsQuestion = True Then
BntSi.Visible = True
BntNo.Visible = True
Else
BntOk.Visible = True
End If
DisabilitaPulsanti()
Do Until CkErrore = False
Thread.Sleep(50)
Application.DoEvents()
Loop
End Sub
Private Sub BntNo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntNo.Click
WsQuestion = False
Risposta = "No"
BntNo.Visible = False
BntSi.Visible = False
BntOk.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub
Private Sub BntSi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntSi.Click
WsQuestion = False
Risposta = "Si"
BntNo.Visible = False
BntSi.Visible = False
BntOk.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub
Private Sub BntOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntOk.Click
WsQuestion = False
Risposta = "Ok"
BntNo.Visible = False
BntSi.Visible = False
BntOk.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub
L'applicazione sulla quale sto lavorando per convertirla da Vb6 a Net, è visibile in questi due link di presentazione:
https://youtu.be/4SXhPb-ck2s
https://youtu.be/f-xSW86Muog
Chi volesse può anche approfondire l' argomento, magari aprirò un' altro thread.
Qui tutto funziona alla grande compreso il famigerato Application.DoEvents() ( semplicemente DoEvents in Vb6)
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mer 11 mag 2016 - 15:40
>Perché l'affermazione "perché per far intercettare l'evento
>in sub GestioneErrori devo premere uno dei due button due volte"
>è un poco ambigua ?
Perchè all'interno del metodo GestioneErrori non avevi nessun "ascolto" di eventi e perciò non riuscivo a capirela tua domanda.
Per quanto riguarda i bottoni invece è strano e a dirla tutta quasi impossibile che al primo click non scateneni il relativo handler.
Il codice è corretto (parlo dell'handler dei bottoni).
Hai provato a mettere un breakpoint sull'evento di uno dei bottoni per vedere se effettivamente si scatena?
Non è che da qualche altra parte nel codice non fai un 'remove handler' proprio dell'evento dul bottone e poi da qualche altra parte fai un add handler?
Cristian Barca
Italo_vb6
Profilo
| Newbie
9
messaggi | Data Invio:
mer 11 mag 2016 - 18:42
Breakpoint sull'evento di uno dei bottoni provato e effettivamente l'evento si scatena, ma al SECONDO click.
Escludo che da qualche altra parte nel codice venga attivato il 'remove handler' dei button perché l'inconveniente si manifesta anche solo con questa parte di codice. Se vuoi capirci di più puoi fare come ho già fatto io.
Apri una Nuova Applicazione Windows Form contenente:
1 Label (LblMessaggio)
1 Button (BntUscita)
1 Button (BntNo)
1 Button (BntSi)
1 Button (BntOk)
Imports System.Threading (Per lo Sleep)
Public Class Form1
dichiara la variabili :
Dim Risposta As String
Dim CkUscita, WsQuestion,CkErrore As Boolean
incolla il codice postato senza le chiamate a AbilitaPulsanti e DisabilitaPulsanti() (sennò chiaramente ti dà errore) e fallo girare
Vedrai che se non clicchi due volte su uno dei due pulsanti non succede niente.
Perché ?
P.S.
Ho letto sul tuo profilo che sei appassionato di musica. Hai dato un' occhiata ai link ?
Mi piacerebbe conoscere il tuo parere sul mio lavoro.
Italo
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 12 mag 2016 - 10:20
Ho provato.
In pratica la prima volta funziona bene.
le volte successive il loop fa si che quando clicchi su Si o No il bottone non prende subito il focus e quindi sembra che devi fare doppio click per farlo funzionare.
per risolvere basta che sposti il focus su uno dei due bottoni all'interno del metodo GestioneErrori.
If WsQuestion = True Then
BntSi.Visible = True
BntNo.Visible = True
BntNo.Focus()
Else
BntOk.Visible = True
End If
Io per prova l'ho spostato sul bottone No
Cristian Barca
Italo_vb6
Profilo
| Newbie
9
messaggi | Data Invio:
gio 12 mag 2016 - 12:47
Bravo Cristian !!!
Mi hai aiutato molto; anche se fare come dici tu non risolve il problema, perchè obbliga l'utente a cliccare solo sul button con il focus.
Se però uso l'istruzione Me.Focus() tutto va alla grande.
Rimane il mistero del perchè durante il loop, il form perda il focus...... indagherò
ciao e grazie della disponibiltà.
P.S.
non hai risposto al precedente P.S.
Italo
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 12 mag 2016 - 13:44
ciao.
Non ho ancora avuto modo di vedere i link su youtube.
Appena risco ci do una occhiata.
Cristian Barca
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !