江苏省委第六巡视组:WinForm实现可折叠的面板菜单
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 05:33:02
WinForm实现可折叠的面板菜单
WinForm 2010-07-21 19:35:52 阅读112 评论0 字号:大中小 订阅
今天用WinForm做了一个可折叠的面板导航菜单,虽然没有VS工具箱的效果好,但是还是蛮不错的,主要用的知识点效果图:
代码实现:
public partial class FMMain : Form, IFMMain
{
private List
public FMMain()
{
InitializeComponent();
}
//设置控件的停靠属性,默认第一个面板展开
private void SetSplitContainerDock(int index)
{
foreach (Control control in this.splitContainer1.Panel1.Controls)
{
if (control is Button)
{
Button btn = (Button)control;
if (btn.TabIndex > index)
{
if (btn.Dock != DockStyle.Bottom)
{
btn.Dock = DockStyle.Bottom;
btn.BringToFront(); //把该控件置于顶层
}
}
else
{
if (btn.Dock != DockStyle.Top)
{
btn.Dock = DockStyle.Top;
btn.BringToFront(); //把该控件置于顶层
}
}
}
}
}
//根据模块编号获取该模块下的数据
private void GetModulesOfApplication(string appId)
{
DataSet ds;
using (ChannelFactory
{
ISys_UserService proxy = channelFactory.CreateChannel();
//应用程序编号应该作为参数传入
ds = proxy.ModulesOfUserInApplication(Globals.CurrentUser.UserID, appId);
}
tvModules.Nodes.Clear();
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "ParentId='root'";
dv.Sort = "Prority DESC";
foreach (DataRowView row in dv)
{
var tnode = new TreeNode(row["ModuleName"].ToString());
tnode.Tag = row;
BindTree(dv, tnode); //绑定树
tvModules.Nodes.Add(tnode);
}
}
//窗体加载时构造折叠面板
private void FMMain_Load(object sender, EventArgs e)
{
int width = this.splitContainer1.Panel1.Width;
int index = 0;
int tabIndex = 0;
string applicationId = "01";
if (sysList.Count > 0)
{
Button[] btnCollections = new Button[sysList.Count];
foreach (Sys_Applications app in sysList)
{
Button btn = new Button
{
Tag = app.ApplicationId,
Text = app.ApplicationName,
Width = width-2,
Height = 23,
Dock = DockStyle.Top,
BackColor = SystemColors.Control,
UseVisualStyleBackColor = false, //不使用XP主题样式
TextAlign = ContentAlignment.MiddleLeft,
TabIndex = index + 1,
};
btn.Click += (s, ex) => //绑定事件
{
Button clickedButton = (Button)s;
int clickedButtonTabIndex = clickedButton.TabIndex;
//设置按钮的停靠顺序
SetSplitContainerDock(clickedButtonTabIndex);
//加载系统菜单
GetModulesOfApplication(Globals.CurrentUser.UserID, clickedButton.Tag.ToString());
tvModules.BringToFront();
};
if (index == 0) { tabIndex = 1; applicationId = btn.Tag.ToString(); }
btnCollections[index++] = btn;
}
Array.Reverse(btnCollections); //反转数组, 改变控件的Z顺序 ,此句将直接影响下面添加的顺序
this.splitContainer1.Panel1.Controls.AddRange(btnCollections);
this.SetSplitContainerDock(tabIndex);
this.GetModulesOfApplication(Globals.CurrentUser.UserID, applicationId);
this.splitContainer1.Panel1.Padding = new Padding { Left = 0, Right = 0 }; //设置折叠面板和外边缘的间隔像素
}
}
}
vb.net(winform)怎样实现IE浏览器的刷新???
vb 急求如何实现窗体中对winform组件的绑定
在VB.NET中对WINFORM开发,怎样实现对IE浏览器的刷新
谁有可折叠的自行车?
可折叠的那种键盘好不好?
数据库的三级菜单实现
显示器的面板,电调行幅,是如何实现?
这个图片的菜单是怎么实现的?(网吧菜单)
哪里能买到可折叠的那种小剪子
这样的左侧菜单怎么实现?
turbo c++鼠标下拉菜单的实现
qq面板上的浮动菜单是怎么做的?
"控制面板"的经典菜单怎么转化为XP菜单?
控制面板"的经典菜单怎么转化为XP菜单?
winform中,form.show的问题
.net中关于winform拖放的问题
请教winform中icon的问题
winform里combobox控件的问题
询问有关WinForm中DataGrid的用法
xml如何保存winform控件的信息
电脑桌的钥匙为什么有个可折叠设计呢?
小轮子可折叠的那种自行车叫什么名字,多钱?
广州哪里有可折叠的实木儿童餐椅卖
只用ASP文件怎样实现下拉菜单的联动效果?