Windows窗体中的默认按钮命中(试图找到最佳解决方案)

时间:2009-01-15 09:30:27

标签: c# .net windows winforms

问题是:如何使默认按钮专注于表格焦点和响应“Enter”点击,但是当插入符号位于文本框中并且多行属性设置为true时,没有聚焦?...我知道我可以在代码中做一些例外,但也许有一些我现在不知道的“最佳实践”:( 谢谢

6 个答案:

答案 0 :(得分:14)

也许我弄错了,但我要做的是:

  1. 设置表单的“AcceptButton” 到你想要回复的按钮 “输入”
  2. 设置“AcceptsReturn” 多行为真的文本框
  3. et voila

答案 1 :(得分:5)

(编辑 - 答案here非常适合TextBox;此模式可能对缺少AcceptsReturn或等效的其他控件有用

您可以使用GotFocusLostFocus事件轻松更改AcceptButton,例如:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    TextBox multi, single;
    Button btn;
    using(Form form = new Form {
            Controls = {
                (multi= new TextBox { Multiline = true, Dock = DockStyle.Fill}),
                (btn = new Button { Text = "OK", Dock = DockStyle.Bottom,
                    DialogResult = DialogResult.OK}),
                (single = new TextBox { Multiline = false, Dock = DockStyle.Top}),
            }, AcceptButton = btn                
        })
    {
        multi.GotFocus += delegate { form.AcceptButton = null; };
        multi.LostFocus += delegate { form.AcceptButton = btn; };
        btn.Click += delegate { form.Close(); };
        Application.Run(form);
    }
}

答案 2 :(得分:4)

Windows窗体有两个属性:AcceptButton和CancelButton。您可以将它们设置为引用表单上的按钮控件。 AcceptButton告诉用户按下回车键时应该点击哪个按钮,而取消按钮告诉用户按下转义键时应该点击哪个按钮。

通常,您会将AcceptButton的DialogResult设置为DialogResult.OK或DialogResult.Yes,并将DialogResult.Cancel或DialogResult.No设置为CancelButton。这可以确保您在模式下显示表单时可以轻松检查单击了哪个按钮。

答案 3 :(得分:1)

或者您可以在文本框的de focus事件中执行此操作,如

_targetForm.AcceptButton = _targetForm.btnAccept;

然后在另一个带有多行的文本框中对其进行ubind

答案 4 :(得分:0)

在Form_Load上,设置

this.AcceptButton = buttonName;

答案 5 :(得分:0)

执行以下操作:

private void Login_Load(object sender, EventArgs e)
{
    this.AcceptButton = btnLogin;
}