5

この問題が何であるかを理解するのに問題があります。私はグーグルで検索しましたが、この問題に対する多くの解決策を見つけていません。私が見つけた唯一の「解決策」は、最後のノードを展開してから折りたたむためのハックでした。

this.Nodes[this.Nodes.Count - 1].Expand();
this.Nodes[this.Nodes.Count - 1].Collapse();

このスクリーンショットからわかるように、最後のノードは部分的に切り取られており、それを公開する唯一の方法はノードを拡張することです。これにより、TreeViewはそれ自体を正しく再レンダリングします。

ここに画像の説明を入力してください

TreeViewにノードを実際に追加しています。これが結果に影響するかどうかはわかりませんが、TreeViewを自分のクラスに拡張して、いくつかのプロパティとメソッドを追加できるようにしました。

public class MyTreeView : TreeView
{

public void BuildTree()
{
    this.Nodes.Clear();
    foreach (TestSetFolder folder in Folders)
    {
         MyTreeNode node = new MyTreeNode();
         node.Name = folder.Name;
         node.Text = folder.Name;
         node.Tag = folder;
         node.FolderID = folder.NodeID;
         node.IsPopulated = false;

         this.Nodes.Add(node);
     }
 }
 }

これが、ノードをリストに追加する方法です。誰かがこの問題のクリーンな解決策を持っていますか?

4

3 に答える 3

6

視覚的な変更の前後に使用treeView.BeginUpdate() します。treeView.EndUpdate()

SuspendLayout()とResumeLayout()も便利です!

UIを更新する場合は、一度にすべてのノードを追加しないでください。begin呼び出しとendupdate呼び出しの間に挟まれて、1つずつ追加します。

于 2012-09-06T14:54:33.903 に答える
1

EnsureVisible次のように、問題のTreeViewNodeを呼び出すことができます。

treeView1.Nodes[treeView1.Nodes.Count - 1].EnsureVisible();

詳細については、このメソッドのMSDNエントリを確認してください。

編集:
私はそれを見つけたと思います。おそらくルートノードがあり、スクロールして表示するノードはそのルートノードのサブノードです。代わりにこれを試してください:

        TreeNode rootNode = treeView1.Nodes[0];
        TreeNode lastNode = rootNode.Nodes[rootNode.Nodes.Count - 1];
        lastNode.EnsureVisible();

または、MSDNの記事の例を使用して、最後のノードを取得します。

TreeNode lastNode = treeView1.Nodes[treeView1.Nodes.Count - 1].
    Nodes[treeView1.Nodes[treeView1.Nodes.Count - 1].Nodes.Count - 1];
于 2012-09-06T13:40:43.157 に答える
0

TreeNodeクラスのExpandメソッドを見てください。http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.aspxを参照してください

于 2012-09-06T13:31:37.157 に答える