Domanda

Scusate se questa è una domanda stupida, ma io sono un beginer qui.

Ho un semplice personalizzato finestra di dialogo con due pulsanti: Accetta e Annulla. Il pulsante Accept è l'AcceptButton della forma.

voglio fare alcune convalide sull'evento Accept_Click e decidere se posso chiudere la finestra o no, ma ogni volta che lascia questo metodo, la finestra si chiude e restituisce Ok automaticamente.

Che cosa posso fare per fermare la finestra di dialogo si chiuda in sé? o devo fare le cose in un altro modo?

grazie

È stato utile?

Soluzione

Vorrei avere una variabile livello di modulo (chiamarlo _vetoClosing) In Click del pulsante di accettare, vorrei correre convalida e impostare la variabile in base a quanto segue:

    private void acceptButton_Click(object sender, EventArgs e)
    {
        // Am I valid
        _vetoClosing = !isValid();
    }

Poi, nel caso FormClosing, vorrei cancellare vicino se _vetoClosing è vero

    private void Form_FormClosing(object sender, FormClosingEventArgs e)
    {
        // Am I allowed to close
        if (_vetoClosing)
        {
            _vetoClosing = false;
            e.Cancel = true;
        }
    }

Attivazione pulsante Accetta off è ottimale perché si perde la Enter per premere funzionalità.

Altri suggerimenti

Vorrei convalida come i comandi cambiano, e solo attivare il pulsante Accept se l'intero modulo è valido.

Ciò consentirebbe di mantenere il pulsante come pulsante predefinito (AcceptButton), ma evitare che ciò accada.

Una soluzione più pulita sarebbe quella di impostare DialogResult su Nessuno:

private void acceptButton_Click(object sender, EventArgs e)
{
    if (!isValid()) {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
    }
}

E 'l'AcceptButton o CancelButton sul modulo impostato su quel pulsante? In tal caso, provare a disinserimento e manualmente l'impostazione DialogResult nel gestore quando si desidera chiudere la finestra di dialogo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top