C# 为游戏创建控件赋值器菜单

C# 为游戏创建控件赋值器菜单,c#,winforms,C#,Winforms,我正在尝试使用WinForms和C#构建一个windows应用程序,其中一种形式是我希望用户能够为每个运动(即左、右、上、下运动等)分配键。这与 在左侧列中,将列出移动,用户应该能够为每个移动分配一个键。我对windows窗体非常陌生,无法确定左手边的东西使用什么控件,我尝试使用带有KeyDown事件的按钮,但在这种情况下,事件不会触发enter/return键,对于其余的键,它工作正常。那么,应该使用什么控件以及什么事件,以便用户可以为任何运动/控件指定他选择的任何键 编辑:这是初始代码 n

我正在尝试使用WinForms和C#构建一个windows应用程序,其中一种形式是我希望用户能够为每个运动(即左、右、上、下运动等)分配键。这与

在左侧列中,将列出移动,用户应该能够为每个移动分配一个键。我对windows窗体非常陌生,无法确定左手边的东西使用什么控件,我尝试使用带有KeyDown事件的按钮,但在这种情况下,事件不会触发enter/return键,对于其余的键,它工作正常。那么,应该使用什么控件以及什么事件,以便用户可以为任何运动/控件指定他选择的任何键

编辑:这是初始代码

namespace ControllerWinServe
{


public partial class Form2 : Form
{
    static string[] array = new string[6]; 
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
    }
    private void button_d_Click(object sender, EventArgs e)
    {
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    }
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    }
    private void button_u_KeyDown(object sender, KeyEventArgs e)
    {
        MessageBox.Show("Form.KeyPress: '" + e.KeyCode.ToString() + "' pressed.");
    }

    private void button_d_KeyDown(object sender, KeyEventArgs e)
    {
        MessageBox.Show("Form.KeyPress: b2 '" +e.KeyCode.ToString() + "'pressed.");
    }
}
}
在尝试使用user17753的建议之后

namespace ControllerWinServe
{
  public class EnterTextBox : TextBox
 {
  protected override bool IsInputKey(Keys key)
  {
    if (key == Keys.Enter)
        return true;
    return base.IsInputKey(key);
 }
}


public partial class Form2 : Form
{
    static string[] array = new string[6]; 
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
    }
    private void button_d_Click(object sender, EventArgs e)
    {
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    }
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    }
    private void button_u_KeyDown(object sender, KeyEventArgs e)
    {
        MessageBox.Show("Form.KeyPress: '" + e.KeyCode.ToString() + "' pressed.");
    }

    private void button_d_KeyDown(object sender, KeyEventArgs e)
    {
        MessageBox.Show("Form.KeyPress: b2 '" +e.KeyCode.ToString() + "'pressed.");
    }
}
}

如果要在
文本框中按enter键,默认情况下不会触发。您可以创建一个名为
EnterTextBox
的新文件,该文件源于
TextBox
,它覆盖
IsInputKey
,以允许enter触发事件

其中一种执行方式可以是:

public class EnterTextBox : TextBox
{
    protected override bool IsInputKey(Keys key)
    {
        if (key == Keys.Enter)
            return true;
        return base.IsInputKey(key);
    }
}
在项目名称空间中使用此类,您可以从项目名称空间类别下的工具箱中添加
EnterTextBox

然后,您可以添加由
EnterTextBox
上的
KeyDown
事件触发的方法,例如:

    private void button1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            e.Handled = true;
            //stuff to do after enter is pressed
        }
    }

如果要在
文本框中按enter键,默认情况下不会触发。您可以创建一个名为
EnterTextBox
的新文件,该文件源于
TextBox
,它覆盖
IsInputKey
,以允许enter触发事件

其中一种执行方式可以是:

public class EnterTextBox : TextBox
{
    protected override bool IsInputKey(Keys key)
    {
        if (key == Keys.Enter)
            return true;
        return base.IsInputKey(key);
    }
}
在项目名称空间中使用此类,您可以从项目名称空间类别下的工具箱中添加
EnterTextBox

然后,您可以添加由
EnterTextBox
上的
KeyDown
事件触发的方法,例如:

    private void button1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            e.Handled = true;
            //stuff to do after enter is pressed
        }
    }

我尝试使用您提供的代码,但在使用该代码后,designer视图就会关闭,我无法使用拖放方法添加任何工具。你能看一下密码吗。谢谢你的回答。我尝试过使用你提供的代码,但是在使用代码之后,designer视图就会关闭,我无法使用拖放方法添加任何工具。你能看一下密码吗。谢谢你的回答。