2016-05-15 8 views
0

私はツリービューを展開しています。特定のノードにすばやくアクセスするために最初の文字を入力すると、選択したノードがツリービューのフレームの下部に表示されますが、それ自身のサブツリービューは表示されません。選択したノードのサブツリー全体が確実に表示されるようにするにはどうすればよいですか?今選択したノードのサブツリービューが確実に表示されるようにするにはどうすればよいですか?

|_a 
|_[b] 
=============treeview's frame bottom margin 

期待される結果:

|_a 
|_[b] 
    |_1 
    |_2 
    | |_k 
    |_3 
============= 
+1

[EnsureVisible](https://msdn.microsoft.com/en-us/library/system.windows .forms.treenode.ensurevisible%28v = vs.110%29.aspx)と[ExpandAll](https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.expandall%28v= vs.110%29.aspx) – TaW

+0

ツリービュー全体を表示したときに既にExpandAllを使用しました。しかし、選択されたノードの子にEnsureVisibleを使用する方法はありますか? –

+0

'yourTreeView_AfterSelect'で' yourTreeView.SelectedNode.Expand() 'を試してください。または単に右のカーソルキーを押してください。 'node.LastNode'メソッドもあります。 – TaW

答えて

0

このalwysビューで選択したノードの最後の子を維持する必要があります:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    treeView1.SelectedNode.Expand(); 
    treeView1.SelectedNode.LastNode.EnsureVisible(); 
} 

はの最後の子を見つけるには最後の子供などは再帰を書くことができます機能:

TreeNode LastChildNode(TreeNode node) 
{ 
    if (node.Nodes.Count > 0) return LastChildNode(node.LastNode); 
    else return node; 
} 

あなたがAfterSelectコードを変更することができ、それを使用するには:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    TreeNode lastChild = LastChildNode(treeView1.SelectedNode.LastNode); 
    if (lastChild != null) lastChild.EnsureVisible(); 
} 
+0

返信ありがとうございます。私は初心者です、最後の子ノードが確実に表示されるように、そのLastChildNode関数を正確に使用する方法は? –

+0

私の更新された答えを見てください! – TaW

+0

残念ながら、プログラムがクラッシュします。エラーは次のとおりです。http://pastebin.com/aVnJabbK –

関連する問題