7

richtextboxユーザーがテキストを入力できるようにしてwindows formいますが、ユーザーがキーを押したままにすると1文字しか取得できないように設定する必要があります。

たとえば、hold down AAのみを入力し、入力しない場合AAAAAAAAAAAAAAAAAAAAAAAAAAAAAなどです。

キーが押された瞬間からキーが押されるまで、それを 1 つの値に変換したいだけです。

これを達成する方法はありますか?

KeyDownandを使用する必要があると思いますが、KeyUpそれ以降はわかりません。

4

2 に答える 2

7

KeyDownおよびKeyUpイベントについては正しいです。このようにできます。

bool keyDown = false;
bool keyPress = false;

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    e.Handled = keyDown;
    keyDown = true;
}

private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
    keyDown = keyPress = false;
}

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = keyPress;
    keyPress = true;
}
于 2013-03-08T09:28:03.487 に答える
1

メソッドをサブクラス化TextBoxし、オーバーライドすることができます。の後に何もなかった場合は、 に設定して無視してください。コードを確認してください:OnKeyDownOnKeyUpKeyUpsKeyDownKeyEventArgs.SuppresKeyPresstrue

public class MyTextBox:TextBox
{
    bool down = false;
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (!down)
            base.OnKeyDown(e);
        else
            e.SuppressKeyPress = true;
        down = true;
    }
    protected override void OnKeyUp(KeyEventArgs e)
    {
        base.OnKeyUp(e);
        down = false;
    }
}

または、次のようなイベント ハンドラーKeyUpを使用することもできます。KeyDownSuppresKeyPress

bool down = false;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
      if (down)
          e.SuppressKeyPress = true;
      down = true;
}

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
      down = false;
}
于 2013-03-08T09:42:24.437 に答える