我在Windows窗体中的接受按钮有问题。 表单包含两个按钮(确定和取消)。在Form中,我将cancel和accept的属性设置为特定按钮。 除此之外,我还为两个按钮创建了一个简单的Click - Event。 但是当我运行应用程序并按下输入时,我的Click-Method中的断点不会被击中而且没有任何反应。另一方面,取消按钮工作正常。即使我切换了accept-和cancelbutton,accept按钮也不起作用,应用程序似乎忽略了enter-input。 我已经多次抬头看过设计师,但找不到任何可能导致这种行为的事情。 单击事件本身也可以在单击按钮时正常工作,它只是输入输入。 所以我的问题是:有人知道这种奇怪的行为来自哪里?
Designer:
//
// SearchForm
//
this.AcceptButton = this.BtnSearch;
this.CancelButton = this.BtnCancel;
//
//BtnSearch
//
this.BtnSearch.DialogResult = System.Windows.Forms.DialogResult.OK;
this.BtnSearch.Location = new System.Drawing.Point(12, 60);
this.BtnSearch.Name = "BtnSearch";
this.BtnSearch.Size = new System.Drawing.Size(75, 23);
this.BtnSearch.TabIndex = 1;
this.BtnSearch.Text = "Search";
this.BtnSearch.Click += new System.EventHandler(this.BtnSearch_Click);
//
// BtnCancel
//
this.BtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.BtnCancel.Location = new System.Drawing.Point(108, 60);
this.BtnCancel.Name = "BtnCancel";
this.BtnCancel.Size = new System.Drawing.Size(75, 23);
this.BtnCancel.TabIndex = 5;
this.BtnCancel.Text = "Cancel";
this.BtnCancel.Click += new System.EventHandler(this.BtnCancel_Click);
Form:
private void BtnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void BtnSearch_Click(object sender, EventArgs e)
{
//DoStuff
}
答案 0 :(得分:5)
按Enter键,检查控件的焦点。如果那是一个按钮,那么按键笔划将点击该按钮,而不是AcceptButton。
这使得AcceptButton成为具有多个OK和Cancel键的对话框的相当蹩脚的属性。赞成这样做:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Enter) {
btnSearch.PerformClick();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
答案 1 :(得分:0)
您是否将表单显示为模式对话框?我认为接受和取消按钮仅适用于模态对话框。 MSDN article中给出的示例显示了模态对话框。