gpt4 book ai didi

c# - 为游戏创建控制分配器菜单

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:30 25 4
gpt4 key购买 nike

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

enter image description here

在左侧栏中将列出移动,用户应该能够为每个移动分配一个键。我是 Windows 窗体的新手,无法弄清楚左侧的东西要使用什么控件,我尝试使用带有 KeyDown 事件的按钮,但在这个事件中,输入/返回键不会触发,其余的键它工作正常。因此,应该使用什么控件以及什么事件,以便用户可以为任何 Action /控件分配他选择的任何键。

编辑:这是初始代码。

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

最佳答案

如果您谈论的是在 TextBox 中按回车键,默认情况下不会触发。您可以创建一个新的,例如 EnterTextBox,它派生自 TextBox,它覆盖 IsInputKey 以允许输入触发事件。

一个这样的实现可能是:

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
}
}

关于c# - 为游戏创建控制分配器菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12716038/

25 4 0