界面
左边 private DevExpress.XtraTreeList.TreeList treeListDisk; 显示文件和文件夹
右边 private DevExpress.XtraEditors.ListBoxControl listBoxControlFile; 显示文件
效果:点击treelist里面的某一项 右键listbox显示该目录下的所有文件
#region 绑定本地磁盘到treeList
private void InitData() //在 Load事件里面加载此方法
{
treeListDisk.DataSource = new object();
}
bool loadDrives = false;
bool IsFile(DirectoryInfo info)
{
try
{
return (info.Attributes & FileAttributes.Directory) == 0;
}
catch
{
return false;
}
}
bool IsDrive(string val)
{
string[] drives = Directory.GetLogicalDrives();
foreach (string drive in drives)
{
if (drive.Equals(val)) return true;
}
return false;
}
private void treeListDisk_VirtualTreeGetCellValue(object sender, DevExpress.XtraTreeList.VirtualTreeGetCellValueInfo e)
{
DirectoryInfo di = new DirectoryInfo(e.Node.ToString());
if (e.Column == colName) { e.CellData = di.Name; }
if (e.Column == colType)
{
if (IsDrive((string)e.Node)) e.CellData = "Drive";
else if (!IsFile(di))
e.CellData = "Folder";
else
e.CellData = "File";
}
}
private void treeListDisk_VirtualTreeGetChildNodes(object sender, DevExpress.XtraTreeList.VirtualTreeGetChildNodesInfo e)
{
Cursor current = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
if (!loadDrives)
{
string[] roots = Directory.GetLogicalDrives();
e.Children = roots;
loadDrives = true;
}
else
{
try
{
string path = e.Node.ToString();
if (Directory.Exists(path))
{
string[] dirs = Directory.GetDirectories(path);
string[] files = Directory.GetFiles(path);
string[] arr = new string[dirs.Length + files.Length];
dirs.CopyTo(arr, 0);
files.CopyTo(arr, dirs.Length);
e.Children = arr;
}
else e.Children = new object[] { };
}
catch { e.Children = new object[] { }; }
}
Cursor.Current = current;
}
private void AddFile(string path)
{
string[] disk = Directory.GetFiles(path);
listBoxControlFile.Items.Clear();
for (int i = 0; i < disk.Length; i++)
{
listBoxControlFile.Items.Add(Path.GetFileName(disk[i]));
}
}
private void treeListDisk_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e)
{
if (e.Node.GetDisplayText("Type") == "Folder")
e.NodeImageIndex = e.Node.Expanded ? 1 : 0;
else if (e.Node.GetDisplayText("Type") == "File") e.NodeImageIndex = 2;
else e.NodeImageIndex = 4;
}
#endregion
private void treeListDisk_AfterExpand(object sender, NodeEventArgs e)
{
StringBuilder sb = new StringBuilder();
string path1 = GetForeach(e.Node, sb);
string path2 = e.Node.GetDisplayText(0);
string strKey = Path.Combine(path1, path2);
try
{
AddFile(strKey);
}
catch (Exception ex)
{
}
}
private string GetForeach(TreeListNode nodeList, StringBuilder parentNodeName)
{
TreeListNode parentNode = nodeList.ParentNode;
if (parentNode != null)
{
parentNodeName.Insert(0, parentNode.GetDisplayText(0) + "\\");
return GetForeach(nodeList.ParentNode, parentNodeName);
}
return parentNodeName.ToString();
}
哎,脑子不太行,简单的一个小算法写了一上午