【问题标题】:Need something like Accept Button in User Control需要用户控件中的接受按钮之类的东西
【发布时间】:2013-10-22 08:31:57
【问题描述】:

我需要在 Windows 应用程序中的UserControl(不是Form)上有一个Button,以响应“Enter”点击,就像一个按钮设置为Accept Button 的@987654325 @工作。

我无法使按钮成为焦点,因为我需要其他控件通过选项卡更改来获得焦点。

非常感谢任何帮助:)

【问题讨论】:

    标签: c# .net winforms visual-studio


    【解决方案1】:

    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 我看不到一种合理的方法可以使其首先解析查找值,并且仅在解析该搜索参数时才进行搜索。
    【解决方案2】:

    如果将按钮上的 Modifier 属性设置为“Public”,则可以将该按钮用作表单上的 AcceptButton。不幸的是,您无法在 Visual Studio 的属性窗口中在设计时执行此操作,但您可以在代码中执行此操作。

        public Form1()
        {
            InitializeComponent();
            this.AcceptButton = userControl11.button1;
        }
    

    【讨论】:

    • 原始发帖人明确要求这是一个没有AcceptButton 属性的用户控件(不是表单)。
    【解决方案3】:

    我知道这是一个老问题,并且已经回答了,但是我在某些情况下使用它:

    private void UserControl11_Load(object sender, EventArgs e)
    {
        this.FindForm().AcceptButton = Button1;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 2011-12-17
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多