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

0x4*_*9D1 8 .net c# windows winforms

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

Xn0*_*v3r 14

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

  1. 将表单的"AcceptButton"设置为要在"Enter"上响应的Button
  2. 将多行的文本框的"AcceptsReturn"设置为true

et voila


Mar*_*ell 5

(编辑 - 这里的答案是非常好的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);
    }
}
Run Code Online (Sandbox Code Playgroud)