2

C# を使用して .net プログラムを作成しています。ユーザーがテキストボックスのサイズを変更して、テキストボックスを拡大または縮小できるようにするにはどうすればよいですか?

4

2 に答える 2

4

これは Winforms で行うのは非常に簡単で、数行のコードしか必要ありません。Windows のすべてのウィンドウには、ユーザーがサイズを変更できる固有の機能があります。これは通常、トップレベル ウィンドウ (フォーム) に対してのみ行われますが、どのクライアント ウィンドウに対しても同様に機能します。

重要なのは、WM_NCHITTEST メッセージに応答することです。これは、ウィンドウをクリックしたときに Windows がウィンドウに送信するメッセージです。それは本質的に「何がヒットしたのですか?」と尋ねます。「角が打たれた」と言うだけで、Windows はそこから取得します。カーソルを変更して、コーナーをドラッグできることを示します。ユーザーがマウスを動かすと、ウィンドウのサイズが自動的に変更されます。

プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上部から新しいコントロールをフォームにドロップし、その Multiline プロパティを true に設定します。F5 キーを押して、テキスト ボックスの右下隅をドラッグして、機能することを確認します。

using System;
using System.Drawing;
using System.Windows.Forms;

class SizeableTextBox : TextBox {
    protected override void WndProc(ref Message m) {
        base.WndProc(ref m);
        // Intercept WM_NCHITTEST
        if (m.Msg == 0x84 && this.Multiline) {
            // Find out where the cursor is located
            var pos = PointToClient(new Point(m.LParam.ToInt32()));
            // Return HTBOTTOMRIGHT if in the lower-right corner
            if (pos.X >= this.Width - 12 && pos.Y >= this.Height - 12) m.Result = (IntPtr)17;
        }
    }
}
于 2013-01-22T03:33:24.390 に答える
0

手動でサイズを変更できるテキストボックスのネイティブ プロパティはありません。できることは、dockまたはanchorプロパティを設定して、ユーザーがフォームのサイズを変更したときにテキストボックスのサイズを変更することです。

于 2013-01-22T02:53:28.787 に答える