2009-11-01 17 views
6

ツリービューでイメージリストを使用しようとすると、ツリーインデックスがクリックされるとイメージインデックスが変更されます。なぜそれが起こっているのか分かりません。誰でも助けてくれますか?あなたがツリーノードにはImageIndexとSelectedImageIndexの両方を設定する必要があり、事前TreeViewノードの画像インデックスは、選択時に変更されます

答えて

11

感謝。

9

'SelectedImageIndexの目的は、特定のノードの' ImageIndex 'によって設定されているものとは異なる選択をすると、別のイメージを表示できるようにすることです。これらの2つを一致させるには、同じ値に設定する必要があります。これは、設計時またはニーズに応じてプログラムで行うことができます。例えば

、画像が新しいノードをツリービューに追加されたときにそれらを同時に設定するのと同じくらい簡単ですその後、決して変わらない場合:

int myCurrentImageIndex = 0; 
TreeNode node = myTreeView.Nodes.Add("new node!"); 
node.ImageIndex = node.SelectedImageIndex = myCurrentImageIndex; 

しかし、あなたが何らかの理由でImageIndexプロパティの値を変更しない場合最初の作成後(ある種のユーザーアクションへの応答など)、SelectedImageIndexも同様に変更する必要があります。さもなければ、それらは矛盾するでしょう。

int myNewImageIndex = 1; 
node.ImageIndex = node.SelectedImageIndex = myNewImageIndex; 

(AfterSelect 'イベントのイベントハンドラで同じになるようにそれらを設定するのに十分ではないことに注意してください。それはあなたのコードのどこにでもどこImageIndexプロパティの変更を行わなければなりません。)

+0

フォルダのような構造を提示するアプリケーションを実行している場合、ユーザーは「フォルダ」を選択したときに画像に変更があったことに感謝します。変更があまりにも派手ではないか微妙でないことを確認してください。 –

+0

私は同じ状況です。しかし、どうすればこの動作を完全に止めることができますか?すべてのノードは実行時に作成されます。 AfterSelectイベントを追跡すると、これを停止する方法がわかりますか? –

+1

私は正確な状況も持っていました。私が行ったことは、ダイナミックに追加されて以来、実行時にイメージリストのインデックスを決定することができなかったので、関連付けられたインデックスを持つイメージを格納する静的な辞書を作成することでした。だから私は次のようなものを使った:public static readonly Dictionary TREEVIEW_ICONS =新しい辞書();追加時にそれを維持する。ディクショナリの文字列はイメージの一意のファイル名で、intはインデックスをトラッキングする私の方法でした。私。 TREEVIEW_ICONS.Add(iconFileName、TREEVIEW_ICONS.Count) –

1

することができます

TreeNode node = new TreeNode("My treenode", 1, 1); 
関連する問題