Frage

(VS2005, .NET 2.0)

Ich habe eine Form, die als ein Dialogfeld angezeigt wird, um die Showdialog () Methode verwendet. Das CancelButton Eigenschaft des Formulars wird auf eine Schaltfläche auf dem Formular festgelegt. Auch wenn gesetzt ich, dass Dialogresult auf Keinem der Schaltfläche klicken, die Taste noch den Dialog geschlossen wird. Ich will nicht, dies geschieht -. Ich möchte, ob der Dialog geschlossen, um kontrollieren können oder nicht

Dieses Problem tritt nicht mit der AcceptButton der Form -. Mit dieser Dialogresult Satz zu keinem der Schaltfläche, kann ich das tun, was die Verarbeitung erforderlich ist, dann entscheiden, ob er manuell die Form der Dialogresult gesetzt um es zu schließen, um zu bewirken

Ich dachte, die CancelButton Eigenschaft wurde soley bedeutet die Schaltfläche, um anzuzeigen, dass „angeklickt“ werden soll, wenn Flucht gedrückt wird (ähnlich wie die AcceptButton nur die Taste sollte, um anzuzeigen, auf „Klick“, wenn Enter gedrückt wird). Bin ich falsch in das? Habe ich verpasst einen anderen Grund, meine Form zu schließen ist? Oder ist das ein Fehler?

Edit: Code hinzugefügt. Dies ist die Dialogform (Form 2) mit der Aufhebungstaste (Taste 1). Die Löschtaste ist nur die CancelButton der Form, ist es nicht Dialogresult Satz muss Abbrechen, aber die Taste drücken schließt noch die Form

    private void InitializeComponent()
    {
        this.button1 = new System.Windows.Forms.Button();
        this.SuspendLayout();
        // 
        // button1
        // 
        this.button1.Name = "button1";
        this.button1.Text = "button1";
        // 
        // Form2
        // 
        this.CancelButton = this.button1;
        this.Controls.Add( this.button1 );
        this.Name = "Form2";
        this.Text = "Form2";
        this.ResumeLayout( false );
    }
War es hilfreich?

Lösung

Auch hüte dich, dass die Form Alt + F4 geschlossen werden kann durch Drücken und Drücken der X-Taste und beide Wege nicht auslösen auf die Schaltfläche klicken Ereignis abbrechen.

Es sei denn, Sie sind Handling auch diese Situationen wäre es nicht am besten, den Rat von slurdge zu folgen und die Form aus dem Schließen der Formclosing Ereignis verhindern.

Edit: Beachten Sie auch, dass, wenn Sie den Dialog der Taste wieder auf Kein in den Fenstern Eigenschaften ändern, können Sie es auf den Standardwert ändern. Wenn der Wert ist der Standardwert der Immobilie, dann wird es nicht in dem * .Designer.cs beibehalten werden. Selbst wenn sie die Form Initialisierungscode beibehalten wurden, ist zuletzt in dem * .Designer.cs platziert und würde die None außer Kraft setzt mit wegen der Linie Abbruch:

this.CancelButton = this.button1;

Wie Sie in Reflector überprüfen die vorhergehende Zeile tut dies:

public void set_CancelButton(IButtonControl value)
{
    base.Properties.SetObject(PropCancelButton, value);
    if ((value != null) && (value.DialogResult == DialogResult.None))
    {
        value.DialogResult = DialogResult.Cancel;
    }
}

Sie können es auf keine ändern zurück in den Konstruktor nach dem Aufruf InitializeComponent ().

Andere Tipps

Es scheint, dass Sie die Validierung von Formular Schließung durchführen möchten.
Die Formclosing Veranstaltung ist eine perfekte Passform für diese. Dies würde ermöglichen es Ihnen, den gleichen Code zu haben, zu schließen oder nicht zu steuern.
Stellen Sie einfach die Cancel-Eigenschaft auf true Schließung zu verhindern. Siehe Formclosing.

Es ist das Standardverhalten.

Von MSDN:

Diese Eigenschaft ermöglicht es Ihnen, eine Standardaktion zu bezeichnen, die auftreten, wenn der Benutzer die ESC-Taste in der Anwendung drückt. Sie können diese Eigenschaft verwenden, um den Benutzer zu ermöglichen, schnell ein einfaches Formular navigieren, indem sie einfach die ESC-Taste drücken, um ein Fenster zu schließen, ohne Änderungen anstatt manuell zu begehen Klicken auf die Schaltfläche mit der Maus abzubrechen.

CancelButton Property

Anstatt zu versuchen, dies in dem button_click Ereignisse zu behandeln, behandelt es in dem form_closing Ereignisse.

MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
   if (DialogResult == DialogResult.Cancel)
   {
      // do my processing ...
      if (false)
         e.Cancel = true;   // stop the form from closing
   }
}

Ich behandle meine Button-Code übernehmen hier auch, nehme ich an nichts! = DialogResult.OK ein Abbrechen ist, aber Sie können tun, was für Sie angenehm ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top