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

TreeViewの水平スクロールバー

環境/言語:[環境:WindowsXP 使用言語:VB.NET .NET Framework:2.0]
分類:[.NET]

はじめまして、つくねといいます。

文字列が表示しきれないときに"..."を表示する
http://dobon.net/vb/dotnet/graphics/stringtrimming.html
上記サイトを参考にTreeViewに対してTrimmingした文字をDrawStringしているのですが、
ある一定の文字数以上だとTreeViewに水平スクロールバーが出現してしまいます。

見た目は"..."になっているが、実際には描画しているのかな?と思い、
文字列を描画したときの大きさを計測する
http://dobon.net/vb/dotnet/graphics/measurestring.html
こちらを参考に文字の描画領域を計測してみました。

すると描画領域はTreeViewのWidth内に納まっているのですが、
ToolTipがTreeViewのWidthより大きい場合、水平スクロールバーが表示されてしまいました。

そこで質問なのですが、
・(恐らく自動生成された)ToolTipを表示しないようにしたい。
もしくは
・TreeViewの水平スクロールバーを表示しないようにしたい。(垂直スクロールバーは利用したい。)
どちらかを実現させたいのですが、何か方法はありませんでしょうか?
よろしくお願いします。
コントローラの水平スクロールバーを消す方法ですが、
ShowScrollBar関数でできるかもしれません。

pinvoke.net: Show a TextBox's vertical scrollbar only when it is necessary
http://pinvoke.net/default.aspx/user32/ShowScrollBar.html

Private Declare Function ShowScrollBar Lib "user32" ( _
ByVal hwnd As IntPtr, ByVal wBar As Long, ByVal bShow As Long) As Long

ShowScrollBar(TreeView1.Handle, 0, 0)
■No23869に返信(管理人さんの記事)
> Private Declare Function ShowScrollBar Lib "user32" ( _
> ByVal hwnd As IntPtr, ByVal wBar As Long, ByVal bShow As Long) As Long
>
> ShowScrollBar(TreeView1.Handle, 0, 0)

元の引数の型は (HWND, int, BOOL) なので、Long だと大きすぎる気がします。
http://msdn.microsoft.com/ja-jp/library/cc364862.aspx

Imports System.Runtime.InteropServices
Public Class Form1
    Private Enum SB As Integer
        SB_HORZ
        SB_VERT
        SB_CTL
        SB_BOTH
    End Enum

    Private Declare Function ShowScrollBar Lib "user32" ( _
        ByVal hwnd As IntPtr, _
        ByVal wBar As SB, _
        <MarshalAs(UnmanagedType.Bool)> ByVal bShow As Boolean _
    ) As <MarshalAs(UnmanagedType.Bool)> Boolean

    Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CheckBox1.CheckedChanged
        ShowScrollBar(Me.TreeView1.Handle, SB.SB_HORZ, CheckBox1.Checked)
    End Sub
End Class
管理人様、魔界の仮面弁士様
ありがとうございます。

あれから私の方でも調査をしておりまして、
TreeViewにNodeを追加する際に文字を
文字表示領域 < 表示される文字 < TreeViewのWidth
のサイズにSubstringすることでToolTipと水平スクロールバーの非表示を実現させております。

教えて頂いた手法も試してみて、どちらで実装するか判断しようと思います。

貴重なご意見ありがとうございました。

また何かありましたらお願い致します。
解決済み!

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