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

テキストボックス+スクロールバーの組合せ

環境/言語:[Visual Basic.NET]
分類:[.NET]

os:Windows2000
環境:Visual Basic.NET 2003


こんにちは。
テキストボックスへの表示(投入)長さに合わせてスクロールバーを
自動的に表示させる事は可能なのでしょうか?

以下の頁を参考させて頂いたり、
http://dobon.net/vb/dotnet/control/tbscrollbars.html

リッチテキストボックスで試してみたり(但し改行すると改行コードが入ってしまう)、
プロパティを色々いじってみたりしたのですが実現出来ない状態です。

シンプルな問題の様ですが良い方法がありましたら教授願います。
■No4078に返信(nepiaさんの記事)
はじめまして。 いつもこちらを見ているだけじゃ申し訳ないのでわかる範囲で
お答えしますね^^;

VB.NETは触ってないのでC#での例をあげておきます。
(ほとんど一緒ですよね?)

Labelコントロールは、現在の文字に対する必要な幅を取得することが出来ます。
よって、テキストBOXとフォントを合わせて、同じテキストを与えてやれば
必要な幅が取得できます。
その幅が、テキストBOXの幅を超えたときにスクロールバーつけてやれば
いいわけです。

Graphicを使ったりしても可能でしょうけど、これが一番てっとりばやいです。

以下、C#でのサンプルです。
(テキストBOXのWordWrapはFalse,MultiLineはTrueにしてくださいね)

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
Label a = new Label(); //ラベル作成
a.Font = textBox1.Font; //フォントを合わせる
a.Text = textBox1.Text; //テキストをセット
if(textBox1.Width < a.PreferredWidth &&
textBox1.ScrollBars == ScrollBars.None ) //文字幅がテキストBOXを超えて、まだスクロールバーが表示されていないなら
{
textBox1.ScrollBars = ScrollBars.Horizontal; //スクロールバーセット
//水平スクロールバーの高さをプラス
textBox1.Height +=
System.Windows.Forms.SystemInformation.HorizontalScrollBarHeight;
}
else if(textBox1.Width >= a.PreferredWidth &&
textBox1.ScrollBars != ScrollBars.None) //上記の逆処理です
{
textBox1.Height -=
System.Windows.Forms.SystemInformation.HorizontalScrollBarHeight;
textBox1.ScrollBars = ScrollBars.None;
}
}

みづらくてすいません^^;

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