2012-01-17 21 views
1

StateImageの位置をWinforms TreeViewのTreeNodeのIndexImageの位置に切り替えることができるかどうかを知りたいですか?Winforms TreeViewコントロールのTreeNodeのStateImageとIndexImageの位置の切り替え

以下の画像を参考にしてください。

A TreeNode with a StateImage and the bottom TreeNode without a StateImage

最初のツリーノードはstateImageを有し、第2の一方はありません。

私の目的は、すべてのIndexImageを左に、StateImage(存在する場合)をIndexImageの右に揃えることです。私はOwnerDrawするに木の描画モードを設定してのOnPaintをオーバーライドするために持っていると思う

resulting tree with IndexImages aligned left

結果のツリーは次のようになります。私はthis msdnリンクを読んだが、画像を描くことについては何も言わなかった。私は本当に進行する方法がわかりません。あなたが提供できるヘルプとコード(C#またはVB.net)は非常に高く評価されます。

多くのありがとう

答えて

1

はい、これはカスタム描画が必要です。

TreeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll 

次に、DrawNodeイベントを処理する必要があります。 TreeView.DrawNode Event

DrawNodeイベントのDrawTreeNodeEventArgsパラメータには、イメージからテキストへのペイントに使用できるグラフィックオブジェクトがあります。

もちろん、慣れてしまえば、残念ながらすべてを描画する責任があります。適切なTreeViewグリフを取得することに関するVisualStylesを参照してください。

簡易図:

Private Sub TreeView1_DrawNode(ByVal sender As Object, ByVal e As DrawTreeNodeEventArgs) Handles TreeView1.DrawNode 
    Dim nodeLeft As Integer = (e.Node.Level * 16) + 16 
    e.Graphics.DrawImage(ImageOne, nodeLeft, e.Bounds.Top) 
    e.Graphics.DrawImage(ImageTwo, nodeLeft + 16, e.Bounds.Top) 
    e.Graphics.DrawString(e.Node.Text, Me.Font, Brushes.Black, nodeLeft + 32, e.Bounds.Top) 
End Sub 

この例では、ツリーコントロールと選択状態を描画するコードが欠落しているが、それは、2枚の画像とノードテキストを示しています。カスタム図面TreeViewsはたくさんの作業です。

+0

ご回答いただきありがとうございます。あなたが昨晩与えたリンクはとても役に立ちました。私は、状態イメージを持つ子ノードの描画を処理しました。他のすべてのノードについては、e.DrawDefault = Trueと設定します。これは私の問題を解決し、私が書かなければならなかったコードの量を減らしました。残りの唯一の問題は、選択された子ノードのハイライトを状態イメージで描画することです。私はSystemBrushes.HighlightとFillRectangleを使用しましたが、私は一貫性のある外観を持っていません。インスピレーションのためにアップデートで提供したVisualStylesリンクを見ていきます。 – mazrabul

関連する問題