ErrorProvider mostra errore sull'utilizzo di Windows pulsante di chiusura (X)
-
21-09-2019 - |
Domanda
C'è un modo per trasformare il provider errore dannati fuori quando provo a chiudere il modulo utilizzando il pulsante di (X) di Windows. Si spara la convalida e l'utente deve riempire tutti i campi prima di poter chiudere le form..this sarà un problema di usabilità in quanto molti tendono a chiudere il modulo usando il tasto (X).
ho messo un pulsante per annullare con cause di convalida per falso e spara anche una validazione.
ho trovato qualcuno dicendo che se si utilizza Form.Close () convalide funzioni sono gestite ... Come posso superare questa caratteristica fastidiosa.
ho uno sturucture MDI e mostrare il modulo utilizzando
CreateExam.MdiParent = Me
CreateExam.Show()
sul del padre MDI menuitem click
e avere questa valutazione previsti
Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If String.IsNullOrEmpty(TextBox1.Text) Then
Err.SetError(TextBox1, "required")
e.Cancel = True
End If
If TextBox1.Text.Contains("'") Then
Err.SetError(TextBox1, "Invalid Char")
e.Cancel = True
End If
End Sub
Ogni aiuto è molto apprezzato. googling ha mostrato solo i risultati in cui gli utenti stavano avendo problemi con il più vicino pulsante di un pulsante di comando e che il problema sta causando anche nel mio caso
Soluzione
Il metodo ValidateChildren () impedisce la forma di chiudersi. Incolla questo codice nel modulo per risolvere questo:
protected override void OnFormClosing(FormClosingEventArgs e) {
e.Cancel = false;
}
Altri suggerimenti
Questo è abbastanza semplice correzione, in Evento Closing
del modulo, impostare un flag per indicare lasciando la forma, ad esempio blnLeave
, quando il modulo viene caricato, impostato il flag di False
, quando l'evento Closing
viene attivato, impostare che a True
all'interno di tale gestore di eventi, quindi il cambiamento sarebbe la seguente
Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating If (blnLeave) Then e.Cancel = False; Return End If If String.IsNullOrEmpty(TextBox1.Text) Then Err.SetError(TextBox1, "required") e.Cancel = True End If If TextBox1.Text.Contains("'") Then Err.SetError(TextBox1, "Invalid Char") e.Cancel = True End If End Sub
Modifica Amended questa risposta per l'inclusione come per i commenti di OP. Il mio suggerimento è quello di gestire Closed evento del form, come mostrato
Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed blnLeave = True End Sub
E gestirlo qui a window procedure di esclusione del form, come mostrato qui ....
Private Const SC_CLOSE As Integer = &HF060 Private Const WM_MENUSELECT As Integer = &H11F Private Function LoWord(ByVal Num As Integer) As Integer LoWord = Num & &HFFFF End Function Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = WM_MENUSELECT Then If LoWord(m.WParam.ToInt32()) = SC_CLOSE Then ' Handle the closing via system Menu blnLeave = True End If End If MyBase.WndProc(m) End Sub