0

私は次のコードを持っています:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.N)
        {
            richTextBox1.Select(1, 3);
        }
    }

Nキーを押すと、選択したテキストが「n」に置き換えられます。これを読んだC#のRichTexboxでテキストを選択すると、テキストが削除されますが、効果はありませんでした。

Windowsフォームを使用しています。

4

2 に答える 2

1

おそらく、e.Handled=trueが必要になります。これでイベントを停止します。

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.handled.aspx

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
        if (e.KeyCode == Keys.N)
        {
            richTextBox1.Select(1, 3);
            e.Handled = true;
        }
}
于 2012-11-23T19:09:32.080 に答える
0

自分で試してみてください。
エディタを開き、テキストを入力し、このテキストの一部にマークを付けて、を押しNます。何が起こるのですか?マークされたテキストは。に置き換えられnます。
同じことがあなたのでも起こりますRichTextBox。ここで理解しておくべき重要なことは、設定したイベントでは、一部の機能のみを追加し、デフォルトのイベント処理(OSによって処理される)をそのままにしておくことです。

したがって、コードを使用して、キーを押すだけで実行できます

richTextBox1.Select(1, 3);

これはいくつかの文字を選択し、その後、デフォルトのイベント処理が開始されます。したがって、。に置き換えられるマークされたテキストがいくつかありますN
したがって、イベントを自分で処理したものとしてマークするだけです。-propertyを使用せず、Handled-propertyを使用しSuppressKeyPressます。

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.N)
    {
        richTextBox1.Select(1, 3);
        e.SuppressKeyPress = true;
    }
}

ドキュメントには、Handled次のように明確に記載されています。

If you set Handled to true on a TextBox, that control will
not pass the key press events to the underlying Win32 text
box control, but it will still display the characters that the user typed.

これがの公式ドキュメントですSuppressKeyPress

于 2012-11-23T19:14:35.700 に答える