C# 如何在空的C项目上添加/使用KeyEventHandler

C# 如何在空的C项目上添加/使用KeyEventHandler,c#,keyevent,C#,Keyevent,我正在制作一个C WFA游戏引擎,从一个空的VS项目/地面上构建它。我已经到了需要添加输入的地步,但不知道如何添加keyDown/keyUp事件,也不知道如何添加或使用KeyEventHandler。请原谅我的英语 我曾尝试使用部分类引用From类,但没有帮助。我基本上被卡住了,我已经研究过了,ben找不到任何东西 class Window { // privates needed to intialize the game screen private Form screen;

我正在制作一个C WFA游戏引擎,从一个空的VS项目/地面上构建它。我已经到了需要添加输入的地步,但不知道如何添加keyDown/keyUp事件,也不知道如何添加或使用KeyEventHandler。请原谅我的英语

我曾尝试使用部分类引用From类,但没有帮助。我基本上被卡住了,我已经研究过了,ben找不到任何东西

class Window
{
    // privates needed to intialize the game screen
    private Form screen;
    private Size size;
    private Bitmap bitmap;
    private Graphics LoadGraphics;
    private Graphics FinalGraphics;

    // constructor for the window / game screen
    public Window(GameContainer gc)
    {
        // initializes the game screen
        bitmap = new Bitmap(gc.GetWidth(), gc.GetHeight());
        size = new Size((int)(gc.GetWidth() * gc.GetScale()), (int) 
                         (gc.GetHeight() * gc.GetScale()));
        screen = new Form();

        // makes the Game screen not resizeable 
        screen.GetPreferredSize(size);
        screen.MinimumSize = size;
        screen.MaximumSize = size;
        screen.Size = size;
        screen.FormBorderStyle = FormBorderStyle.FixedToolWindow;

        screen.Text = gc.GetTitle();

        // intializes the graphics
        LoadGraphics = screen.CreateGraphics();
        FinalGraphics = screen.CreateGraphics();
        screen.BackColor = Color.Black;
    }

    // updater for the game screen
    public void Update()
    { 
        Application.DoEvents();
        LoadGraphics = Graphics.FromImage(bitmap);
        FinalGraphics.DrawImage(bitmap, 0, 0, screen.Width, screen.Height);
        screen.Show();

    }

    // getter for the screen
    public Form GetScreen()
    {
        return screen;
    }

    // getter for the bitmap
    public Bitmap GetBitmap()
    {
        return bitmap;
    }

    public Color GetBackcolor()
    {
        return screen.BackColor;
    }
}

class Input
{
    public Input(Window screen)
    {
        screen.GetScreen().KeyPreview = true;
    }

    void Screen_KeyPress( object sender, KeyPressEventArgs e )
    {
        if (e.KeyChar == 65)
        {
            Console.WriteLine("you pressed A");
        }
    }

}

如果它是游戏引擎,您可能希望实际钩住键盘,无论如何,对于键处理程序,您基本上创建了一个委托,所以OnKeyPressed+=双击tab在VS中自动创建委托

经过反复试验,我使它开始工作了

public Input(Window screen)
{
    screen.GetScreen().KeyPreview = true;
    screen.GetScreen().KeyDown += Input_KeyDown;
}

private void Input_KeyDown( object sender, KeyEventArgs e )
{
    if(e.KeyCode == Keys.A)
    {
        Console.WriteLine("you pressed 'A' !");
    }
}

您的按键事件处理程序是否仅用于处理来自需要键盘输入焦点的特定UI元素的键盘输入,或者按键事件处理程序是否应处理按键事件,无论哪个UI元素可能具有输入焦点?如果是游戏引擎,您可能希望实际挂接键盘,无论如何,对于键处理程序,您基本上创建了一个委托,因此,在VSi中双击tab以自动创建委托我想在阅读docs.microsoft.com页面以获取答案时,最关键的部分是我对英语的理解!检查文件;它描述了如何在表单级别执行此操作: