如何让透视表横向排列TreeView横向显示

欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 11156 人关注过本帖
标题:求助:如何让treeview所有节点全部展开
等 级:新手上路
帖 子:12
结帖率:25%
&&已结贴√
&&问题点数:20&&回复次数:7&&&
求助:如何让treeview所有节点全部展开
求助:如何让treeview所有节点全部展开
本人在用TreeView控件时遇到如下问题:
希望执行程序后,总是无法自动展开所有节点(图1所示),
请各位大师帮忙,如何才能达到图2的效果
附件: 您没有浏览附件的权限,请
搜索更多相关主题的帖子:
等 级:论坛游民
帖 子:18
专家分:40
&&得分:10&
很想帮你,可是我没看懂,设置展开或收起就可以吧。
等 级:新手上路
帖 子:12
回复 2楼 zaochen
我的意思是如何用程序来实现展开TREEVIEW中的各个节点.
等 级:版主
威 望:178
帖 子:3295
专家分:21133
试试下面的语句:
o = 表单上的TREEVIEW控件 &&这个自己来写
FOR i = 1 TO o.Nodes.Count
&&& o.Nodes(i).Expanded = .T.
★★★★★为人民服务★★★★★
等 级:版主
威 望:178
帖 子:3295
专家分:21133
&&得分:10&
如果上面的方法不能处理多层的,用递归吧!
★★★★★为人民服务★★★★★
等 级:新手上路
帖 子:12
回复 4楼 cnfarer
已解决,非常感谢!
等 级:新手上路
如何实现的?说来听听,我也想知道!
等 级:新手上路
&&Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
&&&&&&&&TreeView1.Nodes.Add(&nihao&)
&&&&&&&&TreeView1.Nodes(0).Nodes.Add(&xiaowang&)
&&&&&&&&TreeView1.Nodes.Add(&xiaoli&)
&&&&&&&&TreeView1.Nodes(1).Nodes.Add(&xiaohuang&)
&&&&&&&&TreeView1.ExpandAll()&&&' 可以实现完全展开
&&& End Sub
版权所有,并保留所有权利。
Powered by , Processed in 0.063342 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved最近由于项目的关系,对Microsoft在各种编程语言中提供的TreeView控件做了一些研究。最初在网上查了一下,除了Microsoft的MSDN有些分散的knowledge, 并没有发现有这方面主题文章,于是有了写这篇文章的想法,希望可以抛砖引玉,让后来人少走些弯路。
出于个人兴趣的关系,我主要对Microsoft &Visual C++ 和C#两种语言中的TreeView控件进行了相应的研究,在这两种语言中,对于TreeView控件的基本用法本文不做说明,相对高级的用法主要是为TreeItem设置静态图标和选中图标,drag&and drop操作,由于C#中的TreeView控件是所有微软提供的TreeView控件中相对完整,而且设计相对优雅的一个,下面以C#中TreeView控件为例就相应的主题分别说明。
先来看看MSDN上给C# TreeView控件的定义:
Displays a hierarchical collection of labeled items, each represented by a TreeNode.
翻译:表现一组有继承结构关系的带有标签的项的集合,每个标签项由TreeNode来表现。也就是说TreeNode表现树的节点,主要工作由它来承担。
那么如何为TreeNode设置图像呢?
如下文字来自MSDN:
可以在树节点旁显示图像,方法是将一个 ImageList 分配给 ImageList 属性,然后通过引用 Image 在 ImageList 中的索引值来分配该 Image。
使用下面的属性分配图像:
将 ImageIndex 属性设置为当树节点未选定时所显示的 Image 的索引值。
将 SelectedImageIndex 属性设置为当树节点被选定时要显示的 Image 的索引值。
ImageIndex 和 SelectedImageIndex 属性值所引用的图像是所有分配给 Nodes 集合的树节点显示的默认图像。 每个树节点都可以通过设置 TreeNode.ImageIndex 和 TreeNode.SelectedImageIndex 属性来取代默认的图像。
看完了这段文字,你知道该如何操作了么?我觉得可能有好多人还是不是完全的理解,那我们就已程序员的语言来描述一下吧:
首先定义一个ImageList变量并将其赋值给TreeView的ImageList,
1&private&System.Windows.Forms.ImageList&imageList007;2&this.imageList007&=&new&System.Windows.Forms.ImageList(this.components);3&this.treeView1.ImageList&=&this.imageList007;
然后需要对图标进行设置,
this.imageList007.ImageStream&=
((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList007.ImageStream")));this.imageList007.TransparentColor&=&System.Drawing.Color.Tthis.imageList007.Images.SetKeyName(0,&"Icon01.ico");this.imageList007.Images.SetKeyName(1,&"Icon02.ico");this.imageList007.Images.SetKeyName(2,&"Icon03.ico");this.imageList007.Images.SetKeyName(3,&"Icon04.ico");this.imageList007.Images.SetKeyName(4,&"Icon05.ico");
最后可以对TreeView 的ImageIndex 和 SelectedImageIndex 属性进行相应的设置,选择相应的图像,也可以对每个动态生成的节点进行独立的图像设置,到此你已经成功的设置了TreeNode的图像。
那又如何实现Drag and Drop 操作呢?
首先我们需要清楚Drag and Drop的源和目标都是什么,也就是说从哪向哪拖拽,每个部分承担的职责是什么,而只有在源和目标上都做了相应的处理,拖拽过程才可能是完整有效的。
源组件处理:
ItemDrag事件: 当鼠标开始对源树节点进行拖拽的时候,会引发这个事件,也就是说这个事件的发出者应该是源组件, 在这个事件处理函数中需要调用DoDragDrop方法 初始化并开始一个拖拽过程。
目标组件处理:
DragEnter事件: 当初始化操作结束以后,我们需要在拖拽目标处处理DragEnter事件,这个事件发生在源节点被拖动到目标组件范围内的某个点的时候,在这个事件中我们可以对这个拖拽的合法性进行验证,并且设置不同的鼠标形状来表示不同的状态,DragDropEffects 结构用于对鼠标形状进行设置。
目标组件处理:
DragDrop 事件: 这个事件用于在目标组件中处理拖拽事件,发生于源节点已经被拖拽到目的组件处,这时我们可以对拖拽过来的节点进行解析处理等实际工作。
注意:为了完成拖拽操作源组件和目标组件的AllowDrop都需要设置成true.
示例代码,如下代码完成了将一个TreeNode拖拽到一个Form上需要完成的工作:
private&void&UsingTreeViewDemo_Load(object&sender,&EventArgs&e){&&&this.treeView1.ItemDrag&+=&new&System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);&&&this.DragEnter&+=&new&System.Windows.Forms.DragEventHandler(this.Form_DragEnter);&&&this.DragDrop&+=&new&System.Windows.Forms.DragEventHandler(this.Form_DragDrop);}private&void&treeView_ItemDrag(object&sender,&System.Windows.Forms.ItemDragEventArgs&e){&&&&DoDragDrop(e.Item,&DragDropEffects.Copy);}private&void&Form_DragEnter(object&sender,&System.Windows.Forms.DragEventArgs&e){&&&&e.Effect&=&DragDropEffects.C}private&void&Form_DragDrop(object&sender,&System.Windows.Forms.DragEventArgs&e){&&&&&&&&&&TreeNode&NewN&&&&if&(e.Data.GetDataPresent("System.Windows.Forms.TreeNode",&false))&&&&{&&&&&&&&&&NewNode&=&(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");&&&&&&&&&&MessageBox.Show(NewNode.ToString());&&&&}}
至此,本文的使命已经完成,相信大家已经熟悉了这两项相对高级的TreeView用法。欢迎大家就此主题互相讨论,并对本文的不当之处批评指正。
阅读(...) 评论()示例代码:
原文地址:/Tips/673071/WPF-TreeView-with-WinForms-Style-Fomat
Introduction
WPF default&TreeView&is very good, but many people still want it to have lines join each of its child elements, like Windows Forms&TreeView, including me. I have searched on the internet and have some examples, but they were not designed well enough.
Now, I myself designed a&TreeView&with style as WinForms. Hope this will help many people!
Source Code
All you need is an XAML file and a code behind.
First, you need draw Toggle Button: From Triangle button to Plus-Minus button: draw a rectangle with dark border, then draw two lines, one vertical line and one horizontal line. When&TreeViewItem&is expanded, the vertical line will hide:
In the above code, you can see a trigger, it will make the vertical line inside toggle button hide if item is expanded, or show if its children collapsed.
Then, you need to draw vertical and horizontal connecting lines between nodes: You need to redesignTreeViewItem&control. Add these connecting lines:
to your&TreeViewItem&template like this:
Then, you need put the class&TreeViewLineConverter&to your namespace. This class will change the connecting lines if the item is the last in the list:
using System.W
using System.Windows.C
using System.Windows.D
namespace TreeViewEx
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
class TreeViewLineConverter : IValueConverter
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
TreeViewItem item = (TreeViewItem)
ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(item);
return ic.ItemContainerGenerator.IndexFromContainer(item) == ic.Items.Count - 1;
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
Insert your namespace to your XAML, i.e.:
&Window x:Class="TreeViewEx.MainWindow"
xmlns="/winfx/2006/xaml/presentation"
xmlns:x="/winfx/2006/xaml"
xmlns:local="clr-namespace:TreeViewEx"/&
Add this line to&Window.Resources:
&local:TreeViewLineConverter x:Key="LineConverter"/&
Add trigger to&TreeViewItem&template, this trigger changes the connecting lines if the item is the last in the list:
The&TreeView&will have WinForms style now. You can add more trigger to control behavior of&TreeView&if you want. The full trigger can be found in the attached file.
In WinForms&TreeView, the connecting line is a dotted line. To make these lines dotted, change:
But it is not pretty, as you see. As I'm a newbie in WPF, I don't know to style these lines perfectly.
This is the code I referenced before I wrote my own:
阅读(...) 评论()QTreeView 设置水平滚动条 - Maybe - CSDN博客
QTreeView 设置水平滚动条
默认QTreeView的滚动条设置是Qt::ScrollBarAsNeeded.也就是默认值。不修改的话是根据需要显示滚动条的。
我在QTreeView里面添加了item item里面有文本或者点击扩展按钮扩展tree的时候,结果水平方向没有滚动条,导致部分文本不可见。
问题其实处在Column的宽度上。ScrollBar是针对整个QTreeView的Widget,也就是所有column的宽度和而言的,而不是针对于个column当中文本的长度的。
当改变column当中文本的时候。由于column的宽度没有改变,因此不会出现scrollbar滚动条,而是将column所见的内容压缩了,因此需要手动设置column的宽度。
添加一个item之后或者点击扩展按钮的时候,需要调用resizeColumnToContents或者是直接setcolumnwidth。需要修改的地方有添加item的时候。展开或者折叠item的时候在对应的slot函数里面实现。
void&test::DevTreeClicked(const&QModelIndex&&index)&&{&&&&&&ui.DevTreeView-&resizeColumnToContents(0);&&}&&
QObject::connect(TreeView,SIGNAL(clicked(const&QModelIndex&)),this,SLOT(DevTreeClicked(const&QModelIndex&&)));&&QObject::connect(TreeView,SIGNAL(collapsed(const&QModelIndex&)),this,SLOT(DevTreeClicked(const&QModelIndex&&)));&&QObject::connect(TreeView,SIGNAL(expanded(const&QModelIndex&)),this,SLOT(DevTreeClicked(const&QModelIndex&&)));&&
只要知道ScrollBar是针对于整个column而言。而不是针对content而言就好解决这个问题了
我的热门文章

我要回帖

更多关于 word如何让一页横向 的文章

 

随机推荐