7

長さが 5 文字から 1000 文字までのさまざまな文字列を返すことができるテキスト ボックスがあります。次のプロパティがあります。

  • 複数行 = true
  • ワードラップ = true

次のことを可能にするために、テキストボックスの他のどのプロパティを設定する必要がありますか?

  • ボックスの幅は固定する必要があります
  • ボックスの高さは、返されるテキストの量に応じて自動調整されます。たとえば、テキストが 3 行にまたがる場合は、高さが 3 行に調整されます。
4

7 に答える 7

9

次のコードを試してください。

public partial class Form1 : Form
{
     private const int EM_GETLINECOUNT = 0xba;
     [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
     private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);


     public Form1()
     {
        InitializeComponent();
     }

     private void textBox1_TextChanged(object sender, EventArgs e)
     {
        var numberOfLines = SendMessage(textBox1.Handle.ToInt32(), EM_GETLINECOUNT, 0, 0);
        this.textBox1.Height = (textBox1.Font.Height + 2) * numberOfLines;
     }
} 
于 2012-05-13T21:06:01.543 に答える
3

TextBox クラスに組み込まれているこれを行う機能はないようですが、Font クラスには、ベースライン間のピクセル数を返すHeightプロパティがあります。

このブログ投稿で説明されているように、TextBox 内のテキストが占める行数を調べることもできます(警告: 厳密にはエレガントではありません)。

この情報を取得したら、いくつかの簡単な計算を使用して、TextChanged ハンドラーに TextBox の高さを適切に設定させることができるはずです。

于 2012-05-13T20:52:58.713 に答える
1
private void tb_TextChanged(object sender, EventArgs e)
{
    tb.Height = (tb.Text.Split('\n').Length + 2 ) * tb.Font.Height;
}
于 2013-02-21T10:13:12.343 に答える
1

コードからテキスト ボックスの高さを調整する必要があります。行数を数え (この記事は、まさにそれを行う方法について説明しています)、Textbox.Heightを必要な値に設定します (行数 * 8px など、内部で使用されているフォントによって異なりますTextBox)。

リンクされた記事の解決策では、TextBox コントロール クラスをオーバーライドして、行数を取得できるようにしました。行数を取得する方法は他にもあるかもしれませんが、この記事で提案されている解決策は私には非常に洗練されているように見えます。

于 2012-05-13T20:52:35.593 に答える
0

このようなものは、テキストボックス自体にどのように描画されるかとして、テキストの高さを与えます:

SizeF MessageSize = MyTextBoxControl.CreateGraphics()
                                .MeasureString(MyTextBoxControl.Text,
                                                MyTextBoxControl.Font,
                                                MyTextBoxControl.Width, 
                                                new StringFormat(0));

どうあるStringFormatべきかわかりませんが、値はデフォルトの構成StringFormatFlagsには適用されないようです.TextBox

これでMessageSize.Height、テキストボックス内のテキストの高さがわかりました。

于 2013-11-29T08:10:16.417 に答える