第一次寫博客有點激動啊QAQnode
來新單位,一直沒活幹,公司代碼控制器太多,其中有不少文件夾,每次找一個控制器都老找不到,我又不肯意用VS的全局搜索,想着沒事就作了個查找控制器的小工具。代碼以下:工具
先添加了界面this
在pagelode裏首先須要構建一張虛擬表orm
private void Form1_Load(object sender, EventArgs e)blog
{ 博客
DataColumn d1 = new DataColumn("ID", typeof(int));string
DataColumn d2 = new DataColumn("Name", typeof(string));it
DataColumn d3 = new DataColumn("PID", typeof(string));io
dt.Columns.Add(d1);object
dt.Columns.Add(d2);
dt.Columns.Add(d3);
}
以後再建立肯定按鈕的代碼,肯定是說查找路徑。。
private void button2_Click(object sender, EventArgs e)
{
if (treeView1.Nodes.Count != 0)
treeView1.Nodes.Clear();
string path = txtSeachFolder.Text;
try
{
//if (path != "")
if(path.Trim()=="")
{
path = @"D:\Project\SourceCode\CFLD.PMS_v2.0\CFLD.PMS.Web\Controllers";
FindFile(path);
}
else if (path != "")
{
FindFile(path);
}
else
MessageBox.Show("請輸入路徑");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
這裏面的findfile是用來填充樹控件的,具體代碼是
public void FindFile(string dirPath)
{
DataRow[] rows = dt.Select("ID=-1");
DirectoryInfo di=new DirectoryInfo(dirPath);
var folder = di.GetDirectories();
List<string> conNames = new List<string>();
if (folder.Count() != 0)
{
#region 文件夾
try
{
int i = 0;
foreach (var item in folder)
{
TreeNode tn = new TreeNode();
DataRow dr = dt.NewRow();
dr["ID"] = i;
dr["Name"] = item.Name;
dr["PID"] = i;
dt.Rows.Add(dr);
tn.Tag = dr;
tn.Text = item.Name;
foreach (var item1 in item.GetFiles())
{
TreeNode tn1 = new TreeNode();
tn1.Text = item1.Name;
tn.Nodes.Add(tn1);
}
treeView1.Nodes.Add(tn);
listBox1.Items.Add(item.Name);
i++;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
#endregion
}
else
{
try
{
int j = 0;
var files = di.GetFiles();
foreach(var item in files)
{
TreeNode tn = new TreeNode();
DataRow dr = dt.NewRow();
dr["ID"] = j;
dr["Name"] = item.Name;
dr["PID"] = j;
dt.Rows.Add(dr);
tn.Tag = dr;
tn.Text = item.Name;
treeView1.Nodes.Add(tn);
listBox1.Items.Add(item.Name);
j++;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
在以後是查找的代碼
private void button1_Click(object sender, EventArgs e)
{
bool b = false;
string value = txtSearch.Text;
this.treeView1.CollapseAll();
foreach (TreeNode node in this.treeView1.Nodes)
{
b= nextnodes(node, value);
if (b)
break;
}
if (!b)
MessageBox.Show("沒有查到");
}
這裏面的nextnode是用來肯定查找到的節點位置的,具體代碼是
public bool nextnodes(TreeNode node, string text)
{
foreach (TreeNode tn in node.Nodes)
{
if(tn.Text.ToUpper().Contains(text.ToUpper().Trim()))
{
tn.BackColor = Color.Green; //改變查找到的節點背景色;
if (tn.Parent != null)
tn.Parent.Expand(); //展開服節點
return true;
}
}
return false;
},
好了,看下效果