web-dev-qa-db-ger.com

WinForms AcceptButton funktioniert nicht?

Ok, das nervt mich und ich kann einfach nicht herausfinden, was los ist ...

Ich habe zwei Formen gemacht. Auf dem ersten Formular befindet sich nur eine einfache Schaltfläche, die das andere Formular als Dialog wie folgt öffnet:

using (Form2 f = new Form2())
{
    if (f.ShowDialog() != DialogResult.OK)
        MessageBox.Show("Not OK");
    else
        MessageBox.Show("OK");
}

Die zweite, nämlich Form2, hat zwei Schaltflächen. Alles, was ich getan habe, ist, die Formulare AcceptButton auf eins und CancelButton auf das andere zu setzen. In meinem Kopf ist dies alles, was benötigt werden sollte, um diese Arbeit zu machen. Aber wenn ich es starte, klicke ich auf die Schaltfläche, die Form2 öffnet. Ich kann jetzt auf die als CancelButton festgelegte Schaltfläche klicken, und das Meldungsfeld "Nicht OK" wird angezeigt. Aber wenn ich auf den als AcceptButton eingestellten klicke, passiert nichts? Der InitializeComponent-Code von Form2 sieht folgendermaßen aus:

private void InitializeComponent()
{
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(211, 13);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "button1";
    this.button1.UseVisualStyleBackColor = true;
    // 
    // button2
    // 
    this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
    this.button2.Location = new System.Drawing.Point(130, 13);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(75, 23);
    this.button2.TabIndex = 1;
    this.button2.Text = "button2";
    this.button2.UseVisualStyleBackColor = true;
    // 
    // Form2
    // 
    this.AcceptButton = this.button1;
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.CancelButton = this.button2;
    this.ClientSize = new System.Drawing.Size(298, 59);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.Name = "Form2";
    this.Text = "Form2";
    this.Load += new System.EventHandler(this.Form2_Load);
    this.ResumeLayout(false);
}

Ich habe nichts anderes getan, als diese beiden Schaltflächen hinzuzufügen und AcceptButton und CancelButton festzulegen. Warum funktioniert es nicht?

36
Svish

Es reicht nicht aus, nur den AcceptButton/CancelButton zu setzen. Dies sagt nur, auf welche Schaltfläche zugegriffen werden soll Enter/Esc. Sie müssen das DialogResult im Button-Handler einstellen.

55
Martin Moser

Versuchen Sie, DialogResult auf button1 einzustellen.

this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
50
Samuel
3
user344760

Ich hatte ein Problem mit dem AcceptButton, das nicht funktioniert. Während der DialogResult-Vorschlag Teil des Fixes war, musste ich noch zwei weitere Dinge ändern:

  1. Mein Button war nicht sichtbar - Absichtlich, weil ich das "Ding" anhalten wollte, wenn ein Wagenrücklauf durch Drücken eines Barcodes "gedrückt" wurde.
  2. Der Behälter, in dem sich der Knopf befand, machte einen Unterschied. Ich musste es in demselben Container, in meinem Fall ein Forms.Panel, als das Textfeld haben, das versuchte, darauf zuzugreifen. Ich bin mir nicht sicher, warum das einen Unterschied machen würde, aber es tat es.

Ich hoffe das hilft jemandem.

1
Ads

Sie müssen die KeyPreview-Eigenschaft des Formulars auf True setzen. Der Standardwert ist False. Denken Sie daran, dass die Eingabetaste diese Schaltfläche ausführt, wenn der Fokus auf eine andere Schaltfläche als auf die AcceptButton-Schaltfläche gesetzt ist

0
Khaled Eleftawi