詳解C#如何實(shí)現(xiàn)樹形圖列表
更新時(shí)間:2022年12月12日 16:49:26 作者:芝麻粒兒
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)樹形圖列表,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
實(shí)踐過程
效果

代碼
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region 將MenuStrip控件中的信息添加到TreeView控件中
/// <summary>
/// 將MenuStrip控件中的首行命令項(xiàng)添加到TreeView控件中
/// </summary>
/// <param treeV="TreeView">TreeView控件</param>
/// <param MenuS="MenuStrip">MenuStrip控件</param>
public void GetMenu(TreeView treeV, MenuStrip MenuS)
{
bool Var_Bool = true;
for (int i = 0; i < MenuS.Items.Count; i++) //遍歷MenuStrip組件中的一級(jí)菜單項(xiàng)
{
//將一級(jí)菜單項(xiàng)的名稱添加到TreeView組件的根節(jié)點(diǎn)中,并設(shè)置當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)newNode1
TreeNode newNode1 = treeV.Nodes.Add(MenuS.Items[i].Text);
if (MenuS.Items[i].Enabled == false) //判斷當(dāng)前項(xiàng)是否為可用
{
newNode1.ForeColor = Color.Silver; //改變樹節(jié)點(diǎn)的字體顏色為不可用色
Var_Bool = false;
}
else
{
newNode1.ForeColor = Color.Black; //改變樹節(jié)點(diǎn)的字體顏色為可用色
Var_Bool = true;
}
newNode1.Tag = 0; //標(biāo)識(shí),有子項(xiàng)的命令項(xiàng)
//將當(dāng)前菜單項(xiàng)的所有相關(guān)信息存入到ToolStripDropDownItem對(duì)象中
ToolStripDropDownItem newmenu = (ToolStripDropDownItem) MenuS.Items[i];
GetCavernMenu(newNode1, newmenu, Var_Bool); //添加多層命令項(xiàng)
}
}
/// <summary>
/// 將MenuStrip控件中的多層命今項(xiàng)添加到TreeView控件中
/// </summary>
/// <param newNodeA="TreeNode">TreeNode對(duì)象</param>
/// <param newmenuA="ToolStripDropDownItem">ToolStripDropDownItem對(duì)象</param>
/// <param BL="bool">標(biāo)識(shí)(是否可用)</param>
public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
{
bool Var_Bool = true;
if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
for (int j = 0; j < newmenuA.DropDownItems.Count; j++) //遍歷二級(jí)菜單項(xiàng)
{
//將二級(jí)菜單名稱添加到TreeView組件的子節(jié)點(diǎn)newNode1中,并設(shè)置當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)newNode2
TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
Var_Bool = true;
if (BL == false) //判斷當(dāng)前命令項(xiàng)的上一級(jí)命令是否可用
{
newNodeB.ForeColor = Color.Silver; //設(shè)置當(dāng)前命令項(xiàng)的字體顏色為不可用色
newNodeB.Tag = 0; //標(biāo)識(shí),不顯示相應(yīng)的窗體
Var_Bool = false;
}
else
{
if (newmenuA.DropDownItems[j].Enabled == false) //判斷當(dāng)前命令項(xiàng)是否為可用
{
newNodeB.ForeColor = Color.Silver; //設(shè)置當(dāng)前命令項(xiàng)的字體顏色為不可用色
newNodeB.Tag = 0; //標(biāo)識(shí),不顯示相應(yīng)的窗體
Var_Bool = false;
}
else
{
newNodeA.ForeColor = Color.Black; //設(shè)置當(dāng)前命令項(xiàng)的字體顏色為可用色
newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString()); //標(biāo)識(shí),顯示相應(yīng)的窗體
}
}
//將當(dāng)前菜單項(xiàng)的所有相關(guān)信息存入到ToolStripDropDownItem對(duì)象中
ToolStripDropDownItem newmenuB = (ToolStripDropDownItem) newmenuA.DropDownItems[j];
if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0) //如果當(dāng)前命令項(xiàng)有子項(xiàng)
{
newNodeB.Tag = 0; //標(biāo)識(shí),有子項(xiàng)的命令項(xiàng)
GetCavernMenu(newNodeB, newmenuB, Var_Bool); //調(diào)用遞歸方法
}
}
}
#endregion
#region 打開MenuStrip控件或TreeView控件相應(yīng)的窗體
/// <summary>
/// 打開MenuStrip控件或TreeView控件相應(yīng)的窗體
/// </summary>
/// <param n="int">標(biāo)識(shí)</param>
/// <param FName="string">名稱</param>
public void frm_show(int n, string FName)
{
switch (n) //通過標(biāo)識(shí)調(diào)用各子窗體
{
case 0: break;
case 1:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 2:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 3:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 4:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 5:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 6:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 7:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 8:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 9:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 10:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 11:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 12:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 13:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 14:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 15:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 16:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 17:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 18:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 19:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 21:
{
//打開記事本
System.Diagnostics.Process.Start("notepad.exe");
break;
}
case 22:
{
//打開計(jì)算器
System.Diagnostics.Process.Start("calc.exe");
break;
}
case 23:
{
//打開WORD文檔
System.Diagnostics.Process.Start("WINWORD.EXE");
break;
}
case 24:
{
//打開EXCEL文件
System.Diagnostics.Process.Start("EXCEL.EXE");
break;
}
case 25:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 26:
{
if (MessageBox.Show("確認(rèn)退出系統(tǒng)嗎?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) ==
DialogResult.OK)
Application.Exit(); //關(guān)閉當(dāng)前工程
break;
}
case 27:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 28:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 29:
{
Form2 fp = new Form2(); //實(shí)例化一個(gè)窗體
fp.Text = FName; //設(shè)置窗體的名稱
fp.ShowDialog(); //用模試對(duì)話框打開窗體
fp.Dispose(); //釋放窗體的所有資原
break;
}
case 30:
{
//打開幫助對(duì)話框
MessageBox.Show("\t你可以到明日科技網(wǎng)站\t\n\n\t 得到你想知道的\n\t 謝謝使用??!");
break;
}
}
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
Frm_Logon F_Logon = new Frm_Logon();
if (F_Logon.ShowDialog() == DialogResult.OK)
{
GetMenu(treeView1, menuStrip1); //將menuStrip1控件中的信息添加到treeView1控件中
}
}
private void ToolStrip_1_Click(object sender, EventArgs e)
{
frm_show(Convert.ToInt16(((ToolStripMenuItem) sender).Tag.ToString()), ((ToolStripMenuItem) sender).Text);
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
frm_show(Convert.ToInt16(((ToolStripButton) sender).Tag.ToString()), ((ToolStripButton) sender).Text);
}
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
frm_show(Convert.ToInt16(e.Node.Tag.ToString()), e.Node.Text);
}
}
到此這篇關(guān)于詳解C#如何實(shí)現(xiàn)樹形圖列表的文章就介紹到這了,更多相關(guān)C#樹形圖列表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
提權(quán)函數(shù)之RtlAdjustPrivilege()使用說明
RtlAdjustPrivilege() 這玩意是在 NTDLL.DLL 里的一個(gè)不為人知的函數(shù),MS沒有公開,原因就是這玩意實(shí)在是太NB了,以至于不需要任何其他函數(shù)的幫助,僅憑這一個(gè)函數(shù)就可以獲得進(jìn)程ACL的任意權(quán)限!2011-06-06

