GetLineFromCharIndexメソッドが…欲しい

普通のマルチラインで、ワードラップするテキストボックスで縦(Vertical)方向のスクロールバーを必要となった時点で表示したいという簡単な実装をしたかった。

要するにテキストボックスに表示する行数が、スクロールなしで表示可能な行数を超えたらスクロールバーを付けるだけ。実際、.NET Framework 2.0以降なら以下のような雰囲気で実現できる。

    int line = textBox.GetLineFromCharIndex(textBox.TextLength);
    if (line > 10)
    {
        textBox.ScrollBars = ScrollBars.Vertical;
    }

上記のコードは、テキストボックスの行数が10行を超えたらスクロールバーを表示するというもの。本来なら、テキストボックスのサイズ(高さ)とフォントから表示可能な行数を演算するべきかも知れないけど…ここでは略 :|

このコードの肝は、GetLineFromCharIndexメソッドなわけだが…これまた、.NET Compact Frameworkにはない :shock:

ワードラップしないのであれば、改行コードで行数はわかる。でも、ワードラップする…。

次にワードラップする行なのかを計算で求めようとすると…げ、Compact FrameworkにはTextRendererクラスもない :shock: う~ん、計算できないじゃん :?:

それなりに実装できれば、ここに貼り付けて晒そうと思ったけど…プロポーショナルじゃないフォントを指定して、何文字でワードラップするかを数えて…改行とバイト数を数えて何行表示しているかを求めるというコテコテの実装になってしまいましたとさ :arrow:

Compact Frameworkで、良い実装方法があれば教えていただければウレシイです。

Be Sociable, Share!

TrackBack URL :

Comments

  1. 7月 19th, 2008 | 12:39 PM

    [...] 昨日書いた、『GetLineFromCharIndexメソッドが…欲しい』ですが…単純ワードラップも考慮された行数を取得するだけなら、必殺のWinAPI呼び出しでできることを知りました [...]

Leave a reply