问题是:如何使默认按钮在表单聚焦时具有重点,并在按下“Enter”键时响应,但不在文本框中的插入符处具有多行属性设置为true的情况下具有重点?..我知道我可以在代码中做一些例外处理,但也许现在还有一些我不知道的“最佳实践”:(谢谢
也许我理解错了,但我会这样做:
et voila
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);
}
}
Windows窗体有两个属性:AcceptButton和CancelButton,您可以将它们设置为引用表单上的按钮控件。 AcceptButton告诉用户按下回车键时应单击哪个按钮,而CancelButton则告诉用户按下ESC键时应单击哪个按钮。
通常,您会将AcceptButton的DialogResult设置为DialogResult.OK或DialogResult.Yes,并将CancelButton的DialogResult设置为DialogResult.Cancel或DialogResult.No。这样可以确保在以模态方式显示窗体时,轻松检查单击了哪个按钮。
或者你可以在文本框的焦点事件中这样做
_targetForm.AcceptButton = _targetForm.btnAccept;
然后将其解绑并在另一个多行文本框中显示
在Form_Load事件中,设置
this.AcceptButton = buttonName;
请按照以下步骤进行:
private void Login_Load(object sender, EventArgs e)
{
this.AcceptButton = btnLogin;
}