【发布时间】:2014-12-21 23:28:32
【问题描述】:
这就是我将节点添加到 TreeNode 的方式:
private int total_dirs;
private int searched_until_now_dirs;
private int max_percentage;
private TreeNode directories_real_time;
private string SummaryText;
private TreeNode CreateDirectoryNode(string path, string name , int recursive_levl )
{
var directoryNode = new TreeNode(name);
var directoryListing = GetDirectoryListing(path);
var directories = directoryListing.Where(d => d.IsDirectory);
var files = directoryListing.Where(d => !d.IsDirectory);
total_dirs += directories.Count<FTPListDetail>();
searched_until_now_dirs++;
int percentage;
foreach (var dir in directories)
{
directoryNode.Nodes.Add(CreateDirectoryNode(dir.FullPath, dir.Name, recursive_levl+1));
if (recursive_levl == 1)
{
TreeNode temp_tn = (TreeNode)directoryNode.Clone();
this.BeginInvoke(new MethodInvoker( delegate
{
UpdateList(temp_tn);
}));
}
percentage = (searched_until_now_dirs * 100) / total_dirs;
if (percentage > max_percentage)
{
SummaryText = String.Format("Searched dirs {0} / Total dirs {1}", searched_until_now_dirs, total_dirs);
max_percentage = percentage;
backgroundWorker1.ReportProgress(percentage, SummaryText);
}
}
percentage = (searched_until_now_dirs * 100) / total_dirs;
if (percentage > max_percentage)
{
SummaryText = String.Format("Searched dirs {0} / Total dirs {1}", searched_until_now_dirs, total_dirs);
max_percentage = percentage;
backgroundWorker1.ReportProgress(percentage, SummaryText);
}
foreach (var file in files)
{
directoryNode.Nodes.Add(new TreeNode(file.Name));
numberOfFiles.Add(file.FullPath);
}
return directoryNode;
}
然后我正在更新treeView1:
DateTime last_update;
private void UpdateList(TreeNode tn_rt)
{
TimeSpan ts = DateTime.Now - last_update;
if (ts.TotalMilliseconds > 200)
{
treeView1.BeginUpdate();
treeView1.Nodes.Clear();
treeView1.Nodes.Add(tn_rt);
TreeViewXmlPopulation.SerializeTreeView(treeView1, @"c:\XmlFile\Test.xml");
ExpandToLevel(treeView1.Nodes, 1);
treeView1.EndUpdate();
}
}
最后,当我在 treeView1 中看到目录和文件结构时,我想知道当我用鼠标选择项目时,它是目录还是文件。
treeView1 中的目录和文件我是从我的 ftp 服务器获取的。
例如,如果我点击 A,我想知道我选择了一个目录,如果我点击 install.exe,我想知道它是一个文件。
这就是我在 treeView1 中选择项目的方式:
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);
if (treeView1.SelectedNode != null)
{
menuStrip.Show(treeView1, e.Location);
}
}
}
我有一个带有选项的上下文菜单条:
private void menuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem.Text == "Delete")
{
Delete(treeView1.SelectedNode.FullPath);
}
}
在 FullPath 中,它可以只是单个文件或目录名,里面有或没有文件。 我怎么知道它是文件还是目录?在 Delete 方法中,我想决定如果它是一个文件该怎么做,然后删除一个文件,如果它是一个目录,然后做其他事情。
我想使用 Tag 属性,但不知道如何使用它。我试图在 CreateDirectoryNode 中添加这个:
directoryNode.Tag = directoryNode.Nodes;
但我不确定这是否是正确的方法以及以后如何使用标签来识别它是文件还是目录。
【问题讨论】: