DOBON.NET DOBON.NETプログラミング掲示板過去ログ

TextBox内でのDELキーに関して

環境/言語:[環境 : Windows XP、使用言語 : C#、.NET Frameworkのバージョン 1.1)]
分類:[.NET]

初めての質問です。
よろしくお願いします。

早速ですが、

C#でTextBoxを使用してアプリケーションを開発していますが、
TextBox内でDELキーが全く利きません。
念のためKeyPressイベント内でデバッグしてみましたが、
DELキーが押されたときにイベントが発生していません。

VB.NET で試してみましたが問題なく動作しています。
何が原因かわかりません。
思い当たることがあればアドバイスをお願いします。

よろしくお願いします。
2004/09/07(Tue) 12:03:48 編集(投稿者)

■No6036に返信(mtagさんの記事)
> 初めての質問です。
> よろしくお願いします。
>
> 早速ですが、
>
> C#でTextBoxを使用してアプリケーションを開発していますが、
> TextBox内でDELキーが全く利きません。
> 念のためKeyPressイベント内でデバッグしてみましたが、
> DELキーが押されたときにイベントが発生していません。
>
> VB.NET で試してみましたが問題なく動作しています。
> 何が原因かわかりません。
> 思い当たることがあればアドバイスをお願いします。
>
> よろしくお願いします。

[Delete]キーは、KeyDown()イベントで捉えるべきではないでしょうか?

# というより、VB.NETでもKeyPress()イベントでは捉えれません。
■No6039に返信(java.lang.Nullpoさんの記事)

ありがとうございます。

Keyイベントで何かを処理しようとしている訳ではありません。
TextBoxの機能としての[BS]キー(左1文字削除)や
[DEL]キー(右1文字削除)で入力された文字列を編集しようとしています。

[BS]キーは問題なく機能しますが、[DEL]キーが機能しません。
■No6040に返信(mtagさんの記事)
> [BS]キーは問題なく機能しますが、[DEL]キーが機能しません。

えーと...[DELETE]キーを押下しても無反応。
つまり、「前方文字が消えねぇじゃん! どうなってんだこれ!」ってことですか?

普通じゃ有り得ないことですので、以下をご確認ください。

 ProcessDialogKey()などをOverrideしてそこで何かヘンなことやってる
 FormのKeyPreviewがTrueになっており、Form側のKeyEventがキャンセルされてる。


以下、横着な例を挙げます。(あくまで例です)

・ProcessDialogKey()で横着なことをやってみるテスト

    protected override bool ProcessDialogKey(Keys keyData) {
        if (keyData == Keys.Delete) {
            return true;
        }

        return base.ProcessDialogKey (keyData);
    }


・親たるForm側で横着なことをやってみるテスト

        private void Form1_KeyDown(object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Delete) {
                e.Handled = true;
            }
        }
アドバイス、ありがとうございました。

怪しいソースを全て見直してみました。
[DEL]キーをリジェクトしている怪しいソースを見つけました。
現象が必ず起こるであろうと思われる箇所も発見しました。
対処はこれからじっくり考えたいと思います。

ソースを見直すきっかけになるアドバイスをありがとうございました。
時間がかかりましたが、助かりました。

原因を報告しなければいけないのでしょうが、
大変複雑で長くなりそうなので説明は省略させて頂きます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板