在照抄一个现成的软件界面,人家用VB做的功能树结构,就想在winform里面也做一个相同的,但是希望不是使用treeview实现。
新手上午,google海量查询,希望能找到合适的实现方式。
貌似有一些第三方的控件可以实现,而且具有简单易用,效果优良等特点,但是需要破解,没用过第三方控件,也顾忌其稳定性,所以就放弃了
然后就是用button+panel/listview, 或者是menustrip菜单了。去codeproject里面搜索outlook bar 结果果然有一些比较直观的
http://www.codeproject.com/Articles/3950/An-Outlook-Bar-Implementation 这个是我自己以为比较好的
然后在博客园里面和csdn里面的帖子也有了些回复
http://www.codeproject.com/Articles/7247/Themed-Windows-XP-style-Explorer-Bar 这个是一位仁兄推荐的
我找了一个中文(有些懒)的,然后下载了demo,照着里面的样子做了一个,贴出来分享一下了。
代码如下:
public MainForm()
{
InitializeComponent();
createSystemInfoList();
}
//在功能折叠菜单中处理功能项按钮按下事件
private void FunctionButtonClick(object sender, EventArgs e)
{
Button clickButton = (Button)sender;
int clickedButtonTabIndex = clickButton.TabIndex;
foreach (Control ctl in panelFunctionList.Controls)
{
if (ctl is Button)
{
Button btn = (Button)ctl;
if (btn.TabIndex > clickedButtonTabIndex)
{
if (btn.Dock != DockStyle.Bottom)
{
btn.Dock = DockStyle.Bottom;
//This is vital to preserve the correct order
btn.BringToFront();//控件移到 Z 顺序的前面
}
}
else
{
if (btn.Dock != DockStyle.Top)
{
btn.Dock = DockStyle.Top;
btn.BringToFront();
}
}
}
}
switch (clickButton.Text)
{
case "接待管理":
createReceiveMList();
break;
case "费用管理":
createCostMList();
break;
case "老人管理":
createOlderMList();
break;
case"人事管理":
createPersonnelMList();
break;
case"仓库管理":
createStoreMList();
break;
case"基本信息":
createEssentialInfoList();
break;
case "系统信息":
createSystemInfoList();
break;
}
listViewDropDownList.BringToFront();//Without this, the buttons will hide the items.
}
//初始化接待管理下拉菜单
private void createReceiveMList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "ReceiveMList";
listViewDropDownList.Items.Add("接待登记", 0);
listViewDropDownList.Items.Add("来访登记", 0);
listViewDropDownList.Items.Add("查询老人资料", 0);
listViewDropDownList.Items.Add("查询床位资料", 0);
listViewDropDownList.Items.Add("查询员工资料", 0);
}
//初始化费用管理下拉菜单
private void createCostMList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "CostMList";
listViewDropDownList.Items.Add("代收费用", 1);
listViewDropDownList.Items.Add("交费记录", 1);
listViewDropDownList.Items.Add("退住登记", 1);
listViewDropDownList.Items.Add("费用结算", 1);
listViewDropDownList.Items.Add("财务托管", 1);
}
//初始化老人管理下拉菜单
private void createOlderMList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "OlderMList";
listViewDropDownList.Items.Add("老人档案", 2);
listViewDropDownList.Items.Add("入住登记", 2);
listViewDropDownList.Items.Add("床位安排", 2);
listViewDropDownList.Items.Add("外出登记", 2);
listViewDropDownList.Items.Add("老人情况一览表", 2);
}
//初始化人事管理下拉菜单
private void createPersonnelMList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "PersonnelMList";
listViewDropDownList.Items.Add("员工信息", 3);
listViewDropDownList.Items.Add("员工调动", 3);
listViewDropDownList.Items.Add("员工离职", 3);
listViewDropDownList.Items.Add("员工请假/加班", 3);
}
//初始化仓库管理下拉菜单
private void createStoreMList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "StoreMList";
listViewDropDownList.Items.Add("货品信息", 4);
listViewDropDownList.Items.Add("货品入库", 4);
listViewDropDownList.Items.Add("货品出库", 4);
listViewDropDownList.Items.Add("货品库存", 4);
}
//初始化床位管理下拉菜单
private void createEssentialInfoList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "EssentialMList";
listViewDropDownList.Items.Add("资费标准", 5);
listViewDropDownList.Items.Add("楼房资料", 5);
listViewDropDownList.Items.Add("房间资料", 5);
listViewDropDownList.Items.Add("床位资料", 5);
}
//初始化基本信息下拉菜单
private void createSystemInfoList()
{
listViewDropDownList.Items.Clear();
listViewDropDownList.Name = "SystemInfoList";
listViewDropDownList.LargeImageList = imageListForFuncList;
listViewDropDownList.Items.Add("操作员管理", 6);
listViewDropDownList.Items.Add("系统日志", 6);
listViewDropDownList.Items.Add("备份数据库", 6);
listViewDropDownList.Items.Add("恢复数据库", 6);
listViewDropDownList.Items.Add("参数配置", 6);
}
//单击listview中的Item时触发事件处理
private void listViewDropDownList_Click_1(object sender, EventArgs e)
{
ListView FunctionList = (ListView)sender;
if (FunctionList.SelectedItems.Count > 0)
{
MessageBox.Show(FunctionList.SelectedItems[0].Text);
}
}
本文介绍了如何在Winform应用中实现折叠菜单功能,作者尝试避免使用TreeView,而是通过Button和ListView结合的方式进行实现,详细展示了创建和管理下拉菜单的代码示例,包括接待管理、费用管理等多个功能模块。

3384

被折叠的 条评论
为什么被折叠?



