Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用按键来运行方法?_C#_Button_Keypress_Keydown - Fatal编程技术网

C# 如何使用按键来运行方法?

C# 如何使用按键来运行方法?,c#,button,keypress,keydown,C#,Button,Keypress,Keydown,我的表单有几个按钮,如“扫描”和“退出”。我在许多程序中看到,按键可以使用。很多时候,按钮上的文本中会有下划线(我不知道如何在这些论坛上使用下划线选项!)。我转到表单并添加了一个按键事件: private void Form1_KeyPress(object sender, KeyPressEventArgs key) { switch (key.ToString()) { case "s": Run

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

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”则没有任何作用。不确定哪里出错了?

重写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);
}

重写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);
}
key.ToString()
是错误的调用方法。您想访问密钥属性:
key.KeyChar

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

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


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

我认为您正在寻找所谓的:有由“&”符号定义的

摆脱按键事件处理程序。你不需要它

将按钮的文本更改为“&扫描”和“&退出”


另外:

我认为您正在寻找所谓的:有由“&”符号定义的

摆脱按键事件处理程序。你不需要它

将按钮的文本更改为“&扫描”和“&退出”


另外:

您可以在要为按钮的文本属性中的按钮制作热键的字母前面加一个符号和。您可以从表单设计器的“属性”窗格中设置文本属性,也可以通过编程进行设置。下面是编程方法的一个示例

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");
    }
}

您可以在要为按钮的文本属性中的按钮创建热键的字母前面放置一个符号和。您可以从表单设计器的“属性”窗格中设置文本属性,也可以通过编程进行设置。下面是编程方法的一个示例

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");
    }
}

谢谢你。它使我在visual studio中的窗体显示带有下划线的字母,但当程序运行时,这些行实际上并不存在?您可能有一个操作系统功能将它们隐藏起来。按住“Alt”键,它们就会出现。谢谢。它使我在visual studio中的窗体显示带有下划线的字母,但当程序运行时,这些行实际上并不存在?您可能有一个操作系统功能将它们隐藏起来。按住“Alt”键,它们应该会出现。