web-dev-qa-db-ja.com

WinForms AcceptButtonが機能していませんか?

わかりました、これは私を悩ませています、そして私は何が間違っているのか理解できません...

私は2つのフォームを作成しました。最初のフォームには単純なボタンがあり、もう1つのフォームは次のようにダイアログとして開きます。

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

2番目、つまりForm2、2つのボタンがあります。私が行ったのは、フォームのAcceptButtonを1つに設定し、CancelButtonをもう1つに設定することだけです。私の頭の中では、これがこの作品を作るために必要なすべてです。しかし、それを実行するときに、Form2を開くボタンをクリックします。 CancelButtonとして設定された1つのセットをクリックすると、「Not OK」メッセージボックスが表示されます。しかし、AcceptButtonとして設定されたものをクリックしても、何も起こりませんか? Form2のInitializeComponentコードは次のようになります。

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);
}

これら2つのボタンを追加し、AcceptButtonとCancelButtonを設定する以外に何もしていません。なぜ機能しないのですか?

38
Svish

AcceptButton/CancelButtonを設定するだけでは十分ではありません。これは、どのボタンを呼び出すかを指示するだけです Enter/Esc。 ButtonハンドラでDialogResultを設定する必要があります。

56
Martin Moser

button1DialogResultを設定してみてください

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

AcceptButtonが機能しないという問題があり、DialogResultの提案は修正の一部でしたが、変更する必要のある他の2つのことがありました。

  1. ボタンが表示されなかった-意図的に、バーコードをスキャンしてキャリッジリターンが「押された」ときに「Ding」を停止したかったため。
  2. ボタンが入っているコンテナが違いを生みました。アクセスしようとしているテキストボックスと同じコンテナ(私の場合はForms.Panel)に配置する必要がありました。なぜこれが違いを生むのかはわかりませんが、違いはありました。

これが誰かの役に立つことを願っています。

1
Ads

フォームのKeyPreviewプロパティをTrueに設定する必要があります。デフォルト値はFalseです。 AcceptButtonではなく他のボタンにフォーカスが設定されている場合、Enterキーがこのボタンを実行することに注意してください。

0
Khaled Eleftawi