接上。。。
实例说明
在用户制作应用程序时,最主要的部分就是主界面的设计,例如,如何让操作者更直观、更快速的了解本程序的相关功能及操作,如何在主界面中显示当前用户的权限等。本实例将菜单中的内容动态添加到树型列表中,并根据菜单中的用户权限,对树型列表中的相应项进行设置。实例运行结果如图。
开发步骤-续上
自定义方法GetCavernMenu是一个递归方法,主要用于遍历MenuStrip控件中二级项及其以下的所有项的信息,并根据级别添加到TreeView控件中。实现代码如下:
/// <summary>
/// 将MenuStrip控件中的多层命今项添加到treeView控件中
/// </summary>
/// <param newNodeA="TreeNode">TreeNode对象</param>
/// <param newmenuA="ToolStripDropDownItem">ToolStripDropDownItem对象</param>
/// <param BL="bool">标识(是否可用)</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++) //遍历二级菜单项
{
//将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
Var_Bool = true;
if (BL == false) //判断当前命令项的上一级命令是否可用
{
newNodeB.ForeColor = Color.Silver; //设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0; //标识,不显示相应的窗体
Var_Bool = false;
}
else
{
if (newmenuA.DropDownItems[j].Enabled == false) //判断当前命令项是否为可用
{
newNodeB.ForeColor = Color.Silver; //设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0; //标识,不显示相应的窗体
Var_Bool = false;
}
else
{
newNodeA.ForeColor = Color.Black; //设置当前命令项的字体颜色为可用色
newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString()); //标识,显示相应的窗体
}
}
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0) //如果当前命令项有子项
{
newNodeB.Tag = 0; //标识,有子项的命令项
GetCavernMenu(newNodeB, newmenuB, Var_Bool); //调用递归方法
}
}
}
单击工具栏中的按钮时,根据权限显示相应的模块。代码如下:
private void ToolStrip_1_Click(object sender, EventArgs e)
{
frm_show(Convert.ToInt16(((ToolStripMenuItem)sender).Tag.ToString()), ((ToolStripMenuItem)sender).Text);
}
在单击TreeView控件中的节点时,根据权限显示相应的模块。代码如下:
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
frm_show(Convert.ToInt16(e.Node.Tag.ToString()), e.Node.Text);
}
自定义方法frm_show根据各命令项(节点)的Tag属性值,打开相应的窗体。代码如下:
#region 打开MenuStrip控件或TreeView控件相应的窗体
/// <summary>
/// 打开MenuStrip控件或TreeView控件相应的窗体
/// </summary>
/// <param n="int">标识</param>
/// <param FName="string">名称</param>
public void frm_show(int n, string FName)
{
switch (n) //通过标识调用各子窗体
{
case 0: break;
case 1:
{
Form2 fp = new Form2(); //实例化一个窗体
fp.Text = FName; //设置窗体的名称
fp.ShowDialog(); //用模试对话框打开窗体
fp.Dispose(); //释放窗体的所有资原
break;
}
……
case 30:
{
//打开帮助对话框
MessageBox.Show("\t你可以到明日科技网站\t\n\n\t 得到你想知道的\n\t 谢谢使用!!");
break;
}
}
}
#endregion