我是C#的新手,没有任何编程经验.但我已经完成了C#基础知识.现在我想通过添加父节点和子节点来设计一个简单的树视图.
我想为第二个节点添加第二个孩子,我很困扰这里,不知道下一个是什么.
有任何想法吗?
这是代码:
    private void addParentNode_Click(object sender, EventArgs e)
    {
        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
    }
    private void addChildNode_Click(object sender, EventArgs e)
    {
        string yourChildNode;
        yourChildNode = textBox1.Text.Trim();
        treeView2.Nodes[0].Nodes.Add(yourChildNode);
    }
对不起,我不清楚,我不确定我是否真的需要这个:
  //treeView1.BeginUpdate(); 
  //treeView1.Nodes.Clear();
我正在尝试做的是添加父节点和子节点.在我的代码中,我可以添加几个父节点,但是如果我想添加一个子节点,它只会添加到第一个父节点中.我希望如果我添加一个子节点,我想将它添加到第二个父节点或第三个父节点.
在我的代码中,我只使用一个树视图,其名称为treeview2.这是截图
这就是我的最终代码的样子:在我放入else之前,如果我没有选择任何东西,我会收到错误.所以我这样做是因为如果没有选择它,它会将"子节点"添加到"默认节点"或(parent1节点).它似乎运作良好.多谢你们;-)
    //This is for adding a parent node
    private void addParentNode_Click(object sender, EventArgs e)
    {
        treeView2.BeginUpdate();
        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
        treeView2.EndUpdate();
    }
    //This is for adding child node
    private void addChildNode_Click(object sender, EventArgs e)
    {
        if (treeView2.SelectedNode != null)
        { …以下代码直接来自Microsoft,网址为http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.aftercheck%28VS.80%29.aspx.
  // Updates all child tree nodes recursively.
  private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
  {
   foreach (TreeNode node in treeNode.Nodes)
   {
    node.Checked = nodeChecked;
    if (node.Nodes.Count > 0)
    {
     // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
     this.CheckAllChildNodes(node, nodeChecked);
    }
   }
  }
  // NOTE   This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
  // After a tree node's Checked property is changed, all its child …我想知道是否可以轻松关闭TreeView的ScrollViewer.
我有一个带网格的UserControl.其中一个Cell在Stackpanel中有一些TreeView.Control的高度根据TreeView的高度自动调整,因此不需要滚动条.
问题是:我在ListBox中有一堆具有自己的ScrollViewer,但是当我使用MouseWheel时,当你在TreeView上时滚动停止.
这是因为TreeView有自己的ScrollViewer来窃取MouseWheel.我知道这可能是通过覆盖控件模板来实现的,但我希望有一种更简单的方法.
我有一个常规的.NET Windows窗体树视图控件.节点设置如下:
组
- -儿童
- -儿童
如果我双击折叠的组节点,它会展开(如您所料)并触发NodeMouseDoubleClick事件,如果所选节点不是组节点,我的代码会执行某些操作.
当组位于树视图的底部附近时会出现问题,因此当我双击组节点时,它将需要树视图垂直扩展以使子节点适合视图.在这种情况下,如果我双击组节点,当它扩展并调整树视图时,我的鼠标光标位于子节点上(它必须将所有内容都推到一起),这会导致NodeMouseDoubleClick认为子节点被选中,这会导致非常奇怪的行为.
我怎么能绕过这个?我不应该使用NodeMouseDoubleClick或..?
我看到它也在反馈报告中解释了扩展/折叠导致滚动更改后TreeView DoubleClick事件的问题.
我有一个WinForm TreeView控件,显示CaseNotes的Parent Child关系(我知道这对大多数人来说没有任何意义,但它可以帮助我查看答案).
我有一个我需要显示的CaseNotes的DataTable.父/子被定义为:如果行具有ParentNoteID,则它是该注释的childNode,否则它是rootNode.它也可以是父笔记(但不是rootNode),如果另一行有它的ID,因为它是ParentNoteID.
为了使事情变得复杂(可能是简化),我有以下工作(大多数)代码,它们交替地为节点着色.我手动为树视图创建了一个静态集合,它可以非常正确地为它们着色.现在我需要从我的DataTable动态填充节点.
既然我已经逐个节点地通过树视图,我不应该以某种方式将数据附加到这个过程中吗?也许我需要先构建节点,然后将颜色作为单独的例程,但递归方法仍然适用,对吗?
假设我想为每个节点显示CaseNoteID.这是在DataTable中返回的,并且是唯一的.
foreach (TreeNode rootNode in tvwCaseNotes.Nodes)
        {
            ColorNodes(rootNode, Color.MediumVioletRed, Color.DodgerBlue);
        }
protected void ColorNodes(TreeNode root, Color firstColor, Color secondColor)
    {
        root.ForeColor = root.Index % 2 == 0 ? firstColor : secondColor;
        foreach (TreeNode childNode in root.Nodes)
        {
            Color nextColor = childNode.ForeColor = childNode.Index % 2 == 0 ? firstColor : secondColor;
            if (childNode.Nodes.Count > 0)
            {
                // alternate colors for the next node
                if (nextColor == firstColor)
                    ColorNodes(childNode, secondColor, firstColor);
                else
                    ColorNodes(childNode, firstColor, secondColor); …我希望在我的树视图中获得一个树形图扩展的事件.
这样做的原因,有点无关原来的问题:我创建密切相关的XML文件树树,但我允许包括XML元素这样的树可以在多个文件中去.我想在扩展时在treeview中设置treeviewitems的itemssource属性.
为什么我右键单击树视图中的节点,焦点移动到此节点,然后立即返回到先前选择的节点.有什么方法可以允许右键单击选择节点吗?
当我做以下
$('#tree').dynatree("option","initAjax",{url:"http://google.com"});
我希望dynatree忘记当前的树数据,并使用来自指定url的新数据重新加载.但我发现默认情况下不会这样做.
谢谢.
对于我的treeview,我有两个不同的类提供ItemsSource.
public class TreeViewModel : ViewModelBase
{
    public ObservableCollection<NodeViewModel> Items { get; set; }
}
public class NodeViewModel : ViewModelBase
{
    public string Id { get; set; }
    public string Name { get; set; }
    public ObservableCollection<NodeViewModel> Children { get; set; }
}
现在我希望我的TreeView在TreeViewModel中显示Items并显示NodeViewModel提供的分层数据.
这是我的XAML
<Window x:Class="TreeViewMasterDetails.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TreeViewMasterDetails" 
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView Height="Auto" 
                  HorizontalAlignment="Stretch" 
                  Margin="10" 
                  VerticalAlignment="Stretch" 
                  Width="Auto">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="x:Type local:TreeViewModel" ItemsSource="{Binding Items}">
                    <TextBlock Text="{Binding Path=Name}"></TextBlock>
                </HierarchicalDataTemplate>
                <HierarchicalDataTemplate DataType="x:Type local:NodeViewModel" ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Name}"></TextBlock>
                </HierarchicalDataTemplate>
            </TreeView.Resources> …treeview ×10
c# ×6
winforms ×4
wpf ×4
.net ×3
.net-4.0 ×1
checkbox ×1
data-binding ×1
double-click ×1
dynatree ×1
javascript ×1
jquery ×1
recursion ×1
scrollviewer ×1
vb.net ×1
wpf-controls ×1