标签: treenode

为什么TreeView会在WinForms中意外崩溃?

什么会导致TreeView崩溃,除了调用TreeNode上的.Collapse()方法或TreeView的.CollapseAll()方法?

在我正在开发的应用程序中,TreeView将无法正常运行.TreeView仅维护两个级别.选择父节点的子节点时,所有其他节点立即崩溃.但是,我的代码中没有.Collapse()或.CollapseAll()方法调用!

除了.LabelEdit属性(设置为true)之外,TreeView的所有属性都保留其默认值.对于简单的验证/ MessageBox例程,TreeView在AfterLabelEdit事件中有一些相关的代码.

我试过了:

  • 挂钩TreeView的BeforeCollapse事件并引发e.CancelAction标志.

  • 手动扩展TreeView的AfterSelect事件中的所有节点.(这可以作为一个实验,但我不打算
    完全禁止节点崩溃!)

在代码中的许多点上,我逐个节点地迭代TreeView来检查属性.但是,不会发生节点的添加或删除.用户进行选择时修改的唯一TreeNode属性是.ImageIndex和.SelectedImageIndex.

除了上面的两个解决方案,我没有任何线索可能导致此错误.即使没有任何解决方案可以实现,也许任何人都有关于正确处理崩溃的正确方法的想法?(我已尝试在BeforeCollapse事件中设置断点,但除非用户通过鼠标或键盘明确地折叠节点,否则不会触发断点.)


更新:

问题是由于在任何TreeNode上查找.SelectedImageIndex属性.更改此属性会导致所有其他节点崩溃.

我试图用.BeginUpdate()和.EndUpdate()调用无法使用.SelectedImageIndex属性修改代码.

如何避免这种情况?

c# treeview treenode collapse winforms

4
推荐指数
1
解决办法
1633
查看次数

在TreeNode复选框上双击beavior

TreeView到处TreeNodes都有图标和复选框。

我一直在尝试禁用某些对象的checkig / unchecking功能,从而放弃了该BerforeCheck方法中的事件。效果很好,直到我双击复选框:复选框的图像与其实际状态相反(如果状态为,则显示一个复选标记Checked=false)。我试图解决在NodeDoubleClickand BeforeClick方法中手动更改StateImageIndex的问题,但没有成功。

更糟糕的是:我在中添加了第三张图片StateImageList(是的,我也希望复选框也处于三态),但是我还没有使用它(我的代码中从未设置过),并且第三张图片被设置为当前状态双击后的框(此时我无法确定明确的行为)。

我怎样才能最好地使其如预期的那样工作,最糟糕的是禁用复选框的双击?谢谢。

PS:这个问题已经被提出了,但是没有答案...

c# checkbox treeview treenode double-click

4
推荐指数
1
解决办法
2256
查看次数

"类型'System.Windows.Forms.TreeNodeCollection'没有定义构造函数"

我有这个代码:

    private TreeNodeCollection treeCollection;

    public Client(TcpClient c)
    {
        this.tcpClient = c;
        this.tree = null;
        this.treeCollection = new TreeNodeCollection();
        this.treeCollection.Clear();
    }

    public void AddNode(string node)
    {
        this.treeCollection.Add(node);
    }
Run Code Online (Sandbox Code Playgroud)

this.treeCollection = new TreeNodeCollection();回报

The type 'System.Windows.Forms.TreeNodeCollection' has no constructors defined
Run Code Online (Sandbox Code Playgroud)

如果我删除这一行,我得到的treeCollection从未被分配,并且将始终为null ...

Field 'Client.treeCollection' is never assigned to, and will always have its default value null
Run Code Online (Sandbox Code Playgroud)

如何将treeCollection指定为新的TreeNodeCollection,以便我可以使用AddNode方法向其添加节点?

.net c# collections treeview treenode

4
推荐指数
1
解决办法
8381
查看次数

找到Deepest孩子Treenode的水平

我有treenode,我想在treenode找到最深的孩子.如果有2个带有level 11&的子节点,level 13那么我需要将函数返回给我13.

我怎样才能做到这一点 ?

public int FindLevel(TreeNode oParentNode)
{
   counter++;
  forech(TreeNode oSubNode in oParentNode.Nodes)
  {
    FindLevel(oParentNode);
  }

 return Counter;
}
Run Code Online (Sandbox Code Playgroud)

c# recursion treenode winforms

4
推荐指数
1
解决办法
6576
查看次数

创建自定义TreeView/TreeNode

我需要扩展TreeNode类,以便我可以为每个节点添加自定义属性(看作WebForms TreeNode不包含Tag属性).所以这是我的CustomTreeNode:

public class CustomTreeNode : TreeNode
{

    public CustomTreeNode()
    {               
    }

    public CustomTreeNode(int nodeId, string nodeType)
    {
        NodeId = nodeId;
        NodeType = nodeType;
    }

    public string NodeType { get; set; }
    public int NodeId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果我创建一个CustomTreeNode并将其添加到TreeView:

CustomTreeNode node = new CustomTreeNode(1, "CustomType");            
treeView.Nodes.Add(node);
Run Code Online (Sandbox Code Playgroud)

然后我会得到一个执行以下的转换异常:

CustomTreeNode selectedNode = (CustomTreeNode)TreeView.SelectedNode;
Run Code Online (Sandbox Code Playgroud)

因为TreeView返回TreeNode,而不是CustomTreeNode.

我做了一些阅读,看起来我需要扩展TreeView类,并覆盖CreateNode()方法以返回CustomTreeNode而不是TreeNode.所以我创造了这个:

public class CustomTreeView : TreeView
{
    protected override TreeNode CreateNode()
    {
        return new CustomTreeNode();
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,CreateNode()不接受任何参数,因此您必须调用CustomTreeNode类的空构造函数.因此,当我在上面创建CustomTreeNode时,当我从CustomTreeView返回时,nodeId和nodeType值已经丢失,因为空构造函数返回没有任何值的节点.

任何帮助非常感谢.

c# asp.net treeview webforms treenode

4
推荐指数
1
解决办法
2万
查看次数

ExtJS4:查找树节点的DOM元素

我想在我的ExtJS4应用程序中运行自动UI测试.我不想使用Sencha的测试工具Siesta.相反,我想使用自定义工具.

该应用程序使用TreePanel.为了支持自动UI测试,每个treenode(Ext.data.NodeInterface)必须在其HTML表示中具有唯一且与语言无关的标识符作为属性.

添加到树中时,应在treenode处设置此标识符.然后,树形面板的自定义ExtJS插件应该将treenode对象中的标识符呈现为其HTML表示形式.

所以,我的问题是:如何获取Ext.data.NodeInterface的DOM元素?

提前致谢.

dom treenode extjs extjs4

4
推荐指数
1
解决办法
3849
查看次数

提取树状图或群集中节点的层次结构

我想提取树状图或群集的节点的层次结构。

例如,在下一个示例中:

library(dendextend)
dend15 <- c(1:5) %>% dist %>% hclust(method = "average") %>% as.dendrogram
dend15 %>% plot
Run Code Online (Sandbox Code Playgroud)

根据节点在树状图中的位置对其进行分类(请参见下图)

在此处输入图片说明

(图摘自dendextend包的教程)

我想获取每个最终叶子的所有节点作为下一个输出:(标签从左到右,从下到上排序)

        hierarchical structure
leaf_1: 3-2-1
leaf_2: 4-2-1
leaf_3: 6-5-1
leaf_4: 8-7-5-1
leaf_5: 9-7-5-1
Run Code Online (Sandbox Code Playgroud)

提前致谢,

treenode r hierarchical-clustering dendextend

4
推荐指数
1
解决办法
895
查看次数

向Jtree添加拖放支持

我想为我的JTree应用程序添加拖放支持

我有一个自定义的DefaultMutableTreeNode子类

有一个默认的TreeCellRenderer

我需要添加什么东西以及在哪里?

treenode jtree

3
推荐指数
1
解决办法
6365
查看次数

在树结构上实现IEnumerable

根据这些家伙的工作:

我正在尝试实现一个可以这样使用的TreeView助手:

<%= Html.TreeView("records", 
                  Library.Instance.Records, 
                  r => r.Children, 
                  r => r.ID) %>
Run Code Online (Sandbox Code Playgroud)

树结构的定义如下:

public class Tree<T> : TreeNode<T> where T : TreeNode<T>
{ }


public class TreeNode<T> : IDisposable where T : TreeNode<T>
{
    public T Parent { get; set; }
    public TreeNodeList<T> Children { get; set; }
}


public class TreeNodeList<T> : List<TreeNode<T>> where T : TreeNode<T>
{
    public T Parent;

    public T Add(T node)
    {
        base.Add(node);
        node.Parent = (T)Parent;
        return node;
    }

    public void Remove(T node) …
Run Code Online (Sandbox Code Playgroud)

c# collections tree ienumerable treenode

3
推荐指数
1
解决办法
6961
查看次数

如何在TreeView控件中选择当前节点?

当我使用MouseClick树视图控件的事件时,总是选择树中的第一个节点.我该怎么做才能让用户选择当前节点?我正在使用C#.

这是我目前使用的代码:

private void TVRecorder_MouseClick(object sender, MouseEventArgs e)
{
    TreeNode selectedNode = TVRecorder.HitTest(e.Location).Node;
    if (selectedNode != null)
    {
        if (selectedNode.SelectedImageKey == "Test_Space")
        {
            frmRepository rep = new frmRepository();
            string ssql = string.Empty;
            rep.label1.Text = "Scenario-RepositoryDetails";
            rep.LoadAppSettings();
            SqlConnection con4 = new SqlConnection();

            con4.ConnectionString = "Data Source=" + rep.ScnServer + ";" + "initial catalog=" + rep.ScnDbName + ";" + "User Id=" + rep.ScnUserName + ";" + "Password=" + rep.ScnPwd;
            try
            {
                con4.Open();
            }
            catch
            {
                MessageBox.Show("Connection Failed");
            }
            ssql = …
Run Code Online (Sandbox Code Playgroud)

.net c# treeview treenode winforms

3
推荐指数
1
解决办法
2万
查看次数