日期:2014-05-20  浏览次数:20937 次

关于treeview问题,大家帮忙
我把某一目录的文件夹/文件绑定到treeview控件上,如下(已经实现),我同时设置了tv_Directory的CheckBoxes为true
:
                                    ///   <summary>
///   填充数型目录
///   </summary>
private   void   FillTree(string   sCurPath)
{
DirectoryInfo   directory;

tv_Directory.Nodes.Clear();
try  
{
directory   =   new   DirectoryInfo(sCurPath);

if   (directory.Exists   ==   true   )
{
TreeNode   newNode   =   new   TreeNode(directory.FullName);
tv_Directory.Nodes.Add(newNode);
FileList(newNode,   directory);
}
else
{
MessageBox.Show( "您要浏览的目录不存在,请重新选择目录! ");
}
}
catch(   Exception   ex)
{
MessageBox.Show(ex.Message);
}
}

                                    ///   <summary>
///   将文件目录或文件加到treeview的节点上
///   </summary>
private   void   FileList(TreeNode   node,   DirectoryInfo   d)
{                        
//获取所有文件夹
foreach(DirectoryInfo   di   in   d.GetDirectories())
{
TreeNode   tn_folder   =   new   TreeNode   ();
tn_folder.Text   =   di.Name;
tn_folder.Tag   =   di.FullName;
tn_folder.ImageIndex   =   0;
node.Nodes.Add(tn_folder);
FileList(tn_folder,   di);
}
//获取目录中所有文件
foreach(FileInfo   f   in   d.GetFiles())
{
TreeNode   tn_files   =   new   TreeNode   ();
tn_files.Text   =   f.Name;
tn_files.Tag   =   f.FullName;
tn_files.ImageIndex   =   2;
node.Nodes.Add(tn_files);
}
}


我想实现,当我选择文件旁边的复选框时,能打印出选择的文件夹/文件完整路径,下面是代码,这个代码不能正长运行,当我选择跟目录时,能显示跟目录的完整路径,但是其他的不能显示,这是什么原因,请各位帮助!

foreach(TreeNode   node   in   tv_Directory.Nodes)
{
if(node.Checked)
{
MessageBox.Show(node.Tag.ToString());
}
}

------解决方案--------------------
TreeNode newNode = new TreeNode(directory.FullName);
这里的FullName是赋给Text的,怎么会在tag处显示出来,这其中必有猫腻

------解决方案--------------------

------解决方案--------------------
private void tv_Directory_AfterCheck(object sender, TreeViewEventArgs e)
{
MessageBox.Show(e.Node.Tag.ToString());
}
弄到这个事件去不就好了吗,或者你要把所有选择的打印的话,当选择的时候就把他存到一个TABLE去,然后在统一打印北。
------解决方案--------------------
foreach(TreeNode node in tv_Directory.Nodes)

你的foreach只遍历了根节点,子节点没有遍历。

如果非要你这么做的话,需要递归遍历子节点
------解决方案--------------------
父点打勾,子节点并不会自动钩上
先确认子节点的Checked是true
------解决方案--------------------
foreach(TreeNode node in tv_Directory.Nodes)
{
if(node.Checked)
{
MessageBox.Show(node.Tag.ToString());
}