【问题标题】:Accept Button doesn't work接受按钮不起作用
【发布时间】:2014-07-29 10:12:53
【问题描述】:

Windows 窗体中的接受按钮有问题。 表单包含两个按钮(确定和取消)。在表单中,我将取消和接受的属性 - 按钮设置为特定按钮。 除此之外,我还为两个按钮创建了一个简单的 Click - 事件。 但是,当我运行应用程序并按 enter 时,我的 Click-Method 内的断点不会被击中,也没有任何反应。另一方面,取消按钮工作正常。即使我切换了接受和取消按钮,接受按钮也不起作用,并且应用程序似乎忽略了输入输入。 我已经多次查找设计师,但找不到任何可能导致这种行为的东西。 单击按钮时,单击事件本身也可以正常工作,它只是关于输入输入。 所以我的问题是:有人知道这种奇怪行为的来源吗?

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
}

【问题讨论】:

  • 按下Enter时哪个控件有焦点?这里的关键是创建一个重现问题的小样本。从两个按钮开始并恢复控件,直到问题再次出现。例如,您有带有AcceptsReturn = true 的文本框吗?

标签: c# winforms cancel-button acceptbutton


【解决方案1】:

当您按下 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);
}

【讨论】:

  • 感谢您的快速回复!焦点在一个文本框...文本框本身具有属性“AcceptReturn” - 假,我想这应该没问题。我会通过将输入作为按键事件来尝试一下......但这仍然让我发疯!^
  • 这是一个老问题,但我有完全相同的问题。我的用户抱怨使用 Enter 不会关闭对话框。由于大多数对话框都有几个按钮,这节省了我的培根!
【解决方案2】:

您是否将表单显示为模式对话框?我认为接受和取消按钮仅适用于模式对话框。 MSDN article 中给出的示例显示了模态对话框。

【讨论】:

  • 我正在使用非模态对话框(使用 Show() 而不是 ShowDialog()),但奇怪的是,在按下“Enter”时取消按钮工作正常似乎被忽略了。
猜你喜欢
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 2017-05-23
  • 2011-12-02
相关资源
最近更新 更多