按下enter键时未单击AcceptButton

时间:2017-05-24 18:51:25

标签: c# winforms

这似乎非常基本,但未能找到任何相关信息。

我在Windows窗体中有一个按钮,它是AcceptButton并且应该始终具有AcceptButton行为,即当焦点在窗体上时按下回车键应始终单击按钮,并且应始终突出显示该按钮以显示该操作可用。

但是,当单击一个不同的按钮时,该按钮现在突出显示,按下Enter键时,单击该按钮而不是AcceptButton。

这是我的测试应用程序,它显示了行为:

    public Form1()
    {
        InitializeComponent();

        AcceptButton = btnAccept;
    }

    private void btnAccept_Click(object sender, EventArgs e)
    {
        MessageBox.Show("You clicked the accept button");
        Debug.WriteLine(AcceptButton == btnAccept ? "true" : "false");
    }

    private void btnNothing_Click(object sender, EventArgs e)
    {
        Debug.WriteLine(AcceptButton == btnAccept ? "true" : "false");
    }

    private void btnBrowse_Click(object sender, EventArgs e)
    {
        DialogResult result = folderBrowserDialog1.ShowDialog();
        Debug.WriteLine(AcceptButton == btnAccept ? "true" : "false");
    }

当应用程序最初启动时 - 它按预期工作,btnAccept突出显示并输入点击该按钮。

但是,当我单击btnNothing或btnBrowse时,该按钮现在突出显示并按Enter键再次单击该按钮。此外,即使输入按钮单击其他按钮,调试行也始终显示btnAccept仍然是AcceptButton。

enter image description here

Button从Control继承的CanFocus属性看起来很有前途,但此属性是只读的。

这里发生了什么?我可以用一些属性来改变这种行为吗?

修改

根据@AWinkle的答案结束了这个解决方案:

    public Form1()
    {
        InitializeComponent();

        AcceptButton = btnAccept;
    }

    private void btnAccept_Click(object sender, EventArgs e)
    {
        MessageBox.Show("You clicked the accept button");
    }

    private void btnNothing_Click(object sender, EventArgs e)
    {
        Button acceptButton = (Button)this.AcceptButton;
        acceptButton.Select();
    }

    private void btnBrowse_Click(object sender, EventArgs e)
    {
        DialogResult result = folderBrowserDialog1.ShowDialog();

        Button acceptButton = (Button)this.AcceptButton;
        acceptButton.Select();
    }

0 个答案:

没有答案