【发布时间】:2013-10-22 08:31:57
【问题描述】:
我需要在 Windows 应用程序中的UserControl(不是Form)上有一个Button,以响应“Enter”点击,就像一个按钮设置为Accept Button 的@987654325 @工作。
我无法使按钮成为焦点,因为我需要其他控件通过选项卡更改来获得焦点。
非常感谢任何帮助:)
【问题讨论】:
标签: c# .net winforms visual-studio
我需要在 Windows 应用程序中的UserControl(不是Form)上有一个Button,以响应“Enter”点击,就像一个按钮设置为Accept Button 的@987654325 @工作。
我无法使按钮成为焦点,因为我需要其他控件通过选项卡更改来获得焦点。
非常感谢任何帮助:)
【问题讨论】:
标签: c# .net winforms visual-studio
AcceptButton 是 Form 的属性,不能用于 UserControl。不过,您可以简单地覆盖 ProcessCmdKey ,只要用户控件具有焦点,这将起作用。否则,如果您有多个可能处于活动状态的控件,您将需要单独使用表单的 AcceptButton 或覆盖表单中的 ProcessCmdKey。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
{
button.PerformClick();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
【讨论】:
Accept 按钮来触发搜索。如果我在那里有一些查找字段,然后在Enter 的那个框中输入一个短语,我需要首先解析该值,并且应该在第二个Enter 触发搜索(如果这是常规的@,这就是它的工作方式987654325@ 使用“常规”AcceptButton,但使用 ProcessCmdKey 我看不到一种合理的方法可以使其首先解析查找值,并且仅在解析该搜索参数时才进行搜索。
如果将按钮上的 Modifier 属性设置为“Public”,则可以将该按钮用作表单上的 AcceptButton。不幸的是,您无法在 Visual Studio 的属性窗口中在设计时执行此操作,但您可以在代码中执行此操作。
public Form1()
{
InitializeComponent();
this.AcceptButton = userControl11.button1;
}
【讨论】:
AcceptButton 属性的用户控件(不是表单)。
我知道这是一个老问题,并且已经回答了,但是我在某些情况下使用它:
private void UserControl11_Load(object sender, EventArgs e)
{
this.FindForm().AcceptButton = Button1;
}
【讨论】: