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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top