Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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中的按键事件?_C#_.net_Winforms_Visual Studio 2010_Keypress - Fatal编程技术网

C# C中的按键事件?

C# C中的按键事件?,c#,.net,winforms,visual-studio-2010,keypress,C#,.net,Winforms,Visual Studio 2010,Keypress,这在VB.NET中非常简单,我只需执行以下操作 Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then e.Handled = True cmdOk.Perfo

这在VB.NET中非常简单,我只需执行以下操作

Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
        e.Handled = True
        cmdOk.PerformClick()
    End If
End Sub

我不知道如何在C中实现等效,一般来说,文本框或表单都是如此。在Form1.cs中,在左上角的下拉菜单中,没有为事件生成方法的选项,例如如何在VB中生成Sub,我只有WindowsFormsApplication1。可以找到Form1的代码示例

要为特定事件自动创建方法,只需使用控件属性窗口顶部的下拉列表


我这里没有VS,但是你可以看看@0:40,你会看到一个VS屏幕截图,在右下角你会找到属性窗口。在其顶部,您可以找到事件下拉列表。

首先选择文本框。确保看到“属性”窗口,如果没有看到,请使用“视图”菜单。单击闪电图标并找到按键事件。双击它。然后让它看起来像这样:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
        if (e.KeyChar == (char)Keys.Enter) {
            e.Handled = true;
            cmdOk.PerformClick();
        }
    }

事实上,这不是正确的方法,在VB.NET中也不是。将表单的AcceptButton属性设置为cmdOk,这样就不必编写任何代码。现在,OK按钮周围还会有一个很重的边框,这样用户就知道这是她按下Enter键时激活的键。从本地库中挑选一本关于Winforms编程的书,这些东西很难通过反复试验猜到。

选择您的文本框,打开属性窗口,单击事件图标nereast to properties图标您可以看到事件列表,双击表单属性上的“按键”

,可以将事件链接到由事件代码定义的键的事件。或者通过基于KeyFormcode的代码链接这些。我用c:

using System;
using System.Windows.Forms;

namespace KeyDemoForm
{
public partial class KeyDemoForm : Form
{

   public KeyDemoForm()
    {
        InitializeComponent();
    }

    public void KeyDemoForm_KeyPress(object sender, KeyPressEventArgs e)
    {
        charLabel.Text = "Key pressed: " + e.KeyChar;
    }

    public void KeyDemoForm_KeyDown(object sender, KeyEventArgs e)
    {
        KeyInfoLabel.Text =
         "Alt:  " + (e.Alt ? "yes" : "No") + '\n' +
         "Shift:  " + (e.Shift ? "yes" : "No") + '\n' +
         "Ctrl:  " + (e.Control ? "yes" : "No") + '\n' +
         "KeyCode:  " + e.KeyCode + '\n' +
         "KeyValue:  " + e.KeyValue + '\n' +
         "KeyData:  " + e.KeyData;
    }

    public void KeyDemoForm_KeyUp(object sender, KeyEventArgs e)
    {
        charLabel.Text = " ";
        KeyInfoLabel.Text = " ";
    }

    public void KeyDemoForm_Load(object sender, EventArgs e)
    {            
        this.KeyPreview = true;
        this.KeyDown   += KeyDemoForm_KeyDown;
        this.KeyUp     += KeyDemoForm_KeyUp;
        this.KeyPress  += KeyDemoForm_KeyPress;
    } 
}
}

以后,如果您的问题特定于Windows窗体,请使用此标记。不知道存在此标记,谢谢!正如Hans指出的那样,我推荐Windows标准方法。此外,还可以使用将VB.Net转换为C,反之亦然。