2

次のコントロールにジャンプする代わりに、TABキーを受け入れる(そしてそれに応じてTAB、ASCII 0x09、\ tをテキストボックスに配置する)TextBoxが必要です。TextBoxにはプロパティAcceptsTabがあり、これをtrueに設定しましたが、これでは目的の結果が得られません。AcceptsTabプロパティのみが機能し、Multilineもtrueに設定されていることがわかります。ただし、改行を受け入れない1行のTextBoxが必要です。

4

2 に答える 2

4

これがあなたがすることです。TextBox を継承する独自のクラスを作成します。コンストラクターで、multiline を true に設定し、AcceptsTab を true に設定します。次に、WndProc をオーバーライドして、次のコードを使用します。

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == (int)0x102 && m.WParam.ToInt32() == 13)
            {
                return;
            }

            base.WndProc(ref m);
        }

これにより、Enter キーが受け入れられなくなり、新しい行が作成されなくなります。ハッキー?はい、でもうまくいきます..

編集: このコードの機能について説明します。すべてのウィンドウ フォームとコントロールは、ペイント、キー ダウンなどのような何かが発生すると、ウィンドウ メッセージを受け取ります。キーが押されました。それがメッセージで、WParam == 13 の場合は、Enter キーが押されたことを意味します。この場合は何もせずに戻ります。それ以外の場合は、期待どおりに再開します。理にかなっていますか?

于 2008-12-17T15:16:09.963 に答える
0

複数行をtrueに選択し、行サイズを1に設定します。目的の結果が得られます。

于 2008-12-17T13:20:50.973 に答える