2

WinForms と C# を使用して Windows アプリケーションを構築しようとしています。フォームの 1 つで、ユーザーが各動き (つまり、左、右、上、下の動きなど) にキーを割り当てることができるようにします。それは似たようなものです

ここに画像の説明を入力

左側の列に動きがリストされ、ユーザーはすべての動きにキーを割り当てることができるはずです。私は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.");
    }
}
}
4

1 に答える 1

0

Enter キーを押すことについて話している場合TextBox、デフォルトではトリガーされません。たとえば、そのオーバーライドからEnterTextBox派生した新しいものを作成して、Enter がイベントをトリガーできるようにすることができます。TextBoxIsInputKey

そのような実装の 1 つとして、次のようなものがあります。

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

EnterTextBoxプロジェクトの名前空間にこのクラスを使用すると、ツールボックスからプロジェクトの名前空間カテゴリに追加できます。

次に、次のようなKeyDownイベントによってトリガーされるメソッドを追加できます。EnterTextBox

    private void button1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            e.Handled = true;
            //stuff to do after enter is pressed
        }
    }
于 2012-10-03T20:16:04.220 に答える