问题是:如何使默认按钮专注于表格焦点和响应“Enter”点击,但是当插入符号位于文本框中并且多行属性设置为true时,没有聚焦?...我知道我可以在代码中做一些例外,但也许有一些我现在不知道的“最佳实践”:( 谢谢
答案 0 :(得分:14)
也许我弄错了,但我要做的是:
et voila
答案 1 :(得分:5)
(编辑 - 答案here非常适合TextBox
;此模式可能对缺少AcceptsReturn
或等效的其他控件有用
您可以使用GotFocus
和LostFocus
事件轻松更改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;
}