C# windows窗体中的默认按钮命中(试图找到最佳解决方案)
问题是:例如,当插入符号位于文本框中且多行属性设置为true时,如何使默认按钮聚焦于窗体焦点并在“Enter”点击时响应,但不聚焦?。我知道我可以在代码中执行一些例外情况,但可能有一些“最佳实践”我现在不知道:(C# windows窗体中的默认按钮命中(试图找到最佳解决方案),c#,.net,windows,winforms,C#,.net,Windows,Winforms,问题是:例如,当插入符号位于文本框中且多行属性设置为true时,如何使默认按钮聚焦于窗体焦点并在“Enter”点击时响应,但不聚焦?。我知道我可以在代码中执行一些例外情况,但可能有一些“最佳实践”我现在不知道:( 谢谢你也许我误解了你,但我要做的是: 设置表单的“AcceptButton” 单击要响应的按钮 “输入” 设置的“AcceptsReturn” 多行为true的文本框 et voilaWindows窗体有两个属性:AcceptButton和CancelButton。您可以将它们设置为引
谢谢你也许我误解了你,但我要做的是:
et voilaWindows窗体有两个属性:AcceptButton和CancelButton。您可以将它们设置为引用窗体上的按钮控件。AcceptButton告诉用户按enter键时应单击哪个按钮,而Cancel按钮告诉用户按escape键时应单击哪个按钮 通常,您会将AcceptButton的DialogResult设置为DialogResult.OK或DialogResult.Yes,并将DialogResult.Cancel或DialogResult.No设置为CancelButton。这确保您可以轻松检查在以模式显示表单时单击的按钮。(编辑-答案非常适合
文本框
;此模式可能适用于缺少接受返回
或等效项的其他控件)
您可以使用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);
}
}
或者,您可以在文本框的取消焦点事件中执行此操作,如中所示
_targetForm.AcceptButton = _targetForm.btnAccept;
然后在另一个文本框中使用多行在Form\u Load,set
this.AcceptButton = buttonName;
按以下步骤进行:
private void Login_Load(object sender, EventArgs e)
{
this.AcceptButton = btnLogin;
}
多么好的一种构建简单表单的方法!@Rune-一定很喜欢集合/对象初始值设定项。狡猾的一点是“(varName=[initializer])”因此,您可以将变量挂接到事件等;-p是否可以在初始值设定项中设置事件处理程序?因此,您可以在对象初始值设定项中执行委托操作,而不是在对象初始值设定项中执行委托操作?@Rune-no,没有用于此操作的语法。这会很好,并且已经提出了建议(大概有点类似于集合初始值设定项)-但还没有什么乐趣。我也不会为C#4.0屏住呼吸。@Marc:太糟糕了,但它仍然是创建表单的一种非常优雅的方式。谢谢:)我认为这个主题的第一个答案是最好和最简单的(请注意,我在回答中回答了你的问题;这个评论正好出现在你的“回复”选项卡上)