【问题标题】:How can I use a keypress to run a method?如何使用按键来运行方法?
【发布时间】:2012-01-04 20:29:12
【问题描述】:

我的表单有几个按钮,例如“扫描”和“退出”。我已经在许多程序中看到按键可以使用按钮。很多时候,按钮上的文本中都带有下划线(我不知道如何在这些论坛上使用下划线选项!)。我去表单并添加了一个按键事件:

private void Form1_KeyPress(object sender, KeyPressEventArgs key)
    {
        switch (key.ToString())
        {
            case "s":
                Run_Scan();
                break;
            case "e":
                Application.Exit();
                break;
            default:                    
                MessageBox.Show("I'll only accept 's' or 'e'.");
                break;
        }
    }

然后在表单上按“s”或“e”没有任何作用。不知道我哪里出错了?

【问题讨论】:

    标签: c# button keypress keydown


    【解决方案1】:

    覆盖 ProcessKeyCommand 将接受来自表单上任何位置的输入。但是,您应该添加一个修饰符,因为例如在文本框中按“s”或“e”也会触发该操作。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    
        switch (keyData)
        {
            case Keys.S:
                Run_Scan();                
                break;
            case Keys.E:
                Application.Exit();
                break;
            default:                    
                MessageBox.Show("I'll only accept 's' or 'e'.");                
                break;
    
        }        
    
        return base.ProcessCmdKey(ref msg, keyData);
    }
    

    【讨论】:

      【解决方案2】:

      我想你正在寻找所谓的Access Keys:这里是由'&'符号定义的。

      摆脱您的 KeyPress 事件处理程序。你不需要它。

      将按钮的文本更改为“&Scan”和“&Exit”。

      还有:Here are some guidelines about using access keys in windows applications.

      【讨论】:

      • 谢谢。它使我在 Visual Studio 中的表单显示带有下划线的字母,但是当程序运行时,这些行实际上并不存在?
      • 您可能有隐藏它们的操作系统功能。按住“Alt”键,它们应该会出现。
      【解决方案3】:

      key.ToString() 是错误的调用方法。您要访问密钥属性:key.KeyChar

      有关 KeyPressEventArgs 的更多信息,请参阅 MSDN here,其中包括示例。

      【讨论】:

        【解决方案4】:

        您可以在您想要为按钮的 Text 属性中的按钮创建热键的字母前放置一个 & 号。您可以在表单设计器的“属性”窗格中设置 Text 属性,也可以以编程方式设置它。以下是程序化方法的示例。

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
        
                // make the 'B' key the hot key to trigger the key press event of button1
                button1.Text = "&Button";
            }
        
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("B");
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          • 1970-01-01
          • 2010-11-17
          • 1970-01-01
          • 2021-10-26
          • 1970-01-01
          相关资源
          最近更新 更多