精华内容
下载资源
问答
  • winform程序,在窗体中用第三方控件DotNetBar做的菜单栏,在画UI界面时,在点击菜单栏下拉按钮中的第一个按钮VS2008就会弹出错误,提示的是:无法将类型为“DevComponents.DotNetBar.ButtonItem"的对象强制转换为...
  • 最近在搞Winform,想找个折叠式的导航菜单,找个半天,没有找到满意的,找到个第三方组件xpandercontrols,代码太烦人了。codeproject真不错,在那里找到了,代码很瘦的,跟大家分享。vs 2005做的。 界面: 源代码...

    最近在搞Winform,想找个折叠式的导航菜单,找个半天,没有找到满意的,找到个第三方组件xpandercontrols,代码太烦人了。codeproject真不错,在那里找到了,代码很瘦的,跟大家分享。vs 2005做的。

    界面:
    2009071514052348.jpg

    源代码下载

    转载于:https://www.cnblogs.com/lhking/archive/2009/07/15/1524079.html

    展开全文
  • Winform折叠菜单实现

    万次阅读 2017-05-11 17:20:45
     在我还没工作前,听朋友说起他面试时遇到的情况,当时面试他的考官要他用C#实现折叠菜单效果,不用第三方控件,对于当时准备不充分的他可谓是来了个措手不及呀!回来后告诉了我们,抱着试试的心里,尝试实现一番,...

       http://blog.csdn.net/a2344061/article/details/5634879

     在我还没工作前,听朋友说起他面试时遇到的情况,当时面试他的考官要他用C#实现折叠菜单效果,不用第三方控件,对于当时准备不充分的他可谓是来了个措手不及呀!回来后告诉了我们,抱着试试的心里,尝试实现一番,呵呵,没想到还是让我实现了!现在翻出当时实现的代码供初学者学习,高手免了。这个示例用四个button、四个label和一个panel来实现。下面是截图:

     

    准备开始阶段,四个button、四个label和一个panel,调整好它们之间的位置:

    运行后的截图:

     

    图一

     

    图二

    图三

    图四

     

    实现代码:

    Form1.cs

     

    [csharp] view plain copy
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Drawing;  
    6. using System.Text;  
    7. using System.Windows.Forms;  
    8.   
    9. namespace WindowsApplication1  
    10. {  
    11.     public partial class Form1 : Form  
    12.     {  
    13.         public Form1()  
    14.         {  
    15.             InitializeComponent();  
    16.         }  
    17.         List<Button> list = new List<Button>();  
    18.         private void button1_Click(object sender, EventArgs e)  
    19.         {  
    20.             this.label1.Visible = true;  
    21.             this.label2.Visible = false;  
    22.             this.label3.Visible = false;  
    23.             this.label4.Visible = false;  
    24.             ChangeLocation(this.button1);  
    25.         }  
    26.   
    27.   
    28.         private void button2_Click(object sender, EventArgs e)  
    29.         {  
    30.             this.label1.Visible = false;  
    31.             this.label2.Visible = true;  
    32.             this.label3.Visible = false;  
    33.             this.label4.Visible = false;  
    34.             ChangeLocation(this.button2);  
    35.         }  
    36.         /// <summary>  
    37.         /// 改变按钮位置  
    38.         /// </summary>  
    39.         /// <param name="btn"></param>  
    40.         private void ChangeLocation(Button btn)  
    41.         {  
    42.             int num1 = int.Parse(btn.Name.Substring(6));//num1 代表本按钮的名称序号  
    43.             string direction = null;//定义一个方向变量  
    44.             if (btn.Top > this.panel1.Top)//如果本按钮的纵坐标大于面板的纵坐标  
    45.             {  
    46.                 direction = "up";//设置方向变量的值为“up” 即代表菜单向上翻  
    47.             }  
    48.             else if (btn.Top + btn.Height < this.panel1.Top) //如果本按钮的纵坐标加本按钮的高度小于面板的纵坐标  
    49.             {  
    50.                 direction = "down";//设置方向变量的值为“down” 即代表菜单向下翻  
    51.             }  
    52.             if (direction != null)//如果方向变量的值不为空  
    53.             {  
    54.                 btn.Top = this.button1.Top + (btn.Height) * (num1 - 1);//设置本按钮的纵坐标等于本折叠菜单的第一个按钮的纵坐标加上在本按钮之上的几个按钮的高度之和  
    55.                 this.panel1.Top = btn.Top + btn.Height;//面板的纵坐标等于本按钮的纵坐标加上本按钮的高度  
    56.                 int count = 1;//定义计数变量 计算在本按钮之上或之下的按钮有多少个  
    57.                 //循环遍历菜单按钮集合  
    58.                 foreach (Button bt in list)  
    59.                 {  
    60.                     int num2=int.Parse(bt.Name.Substring(6));//得到此按钮的名称序号 即集合中此子元素按钮的名称序号  
    61.                     if (direction == "up")//如果方向变量值为“up”,即菜单往上翻  
    62.                     {  
    63.                         if (num2 < num1 && num2 != 1)//如果此子元素按钮的名称序号小于本按钮的名称序号,并且此子元素按钮的名称序号不等于1  
    64.                         {  
    65.                             bt.Top = button1.Top + btn.Height * count;//此子元素按钮的纵坐标等于本折叠菜单的第一个按钮的纵坐标加上此子元素按钮之上的几个按钮的高度之和  
    66.                             if (num2 == num1 - 1)//如果此子元素按钮的名称序号等于本按钮的名称序号减1,则  
    67.                                 break;//跳出方法  
    68.                             count++;//按钮个数加1  
    69.                         }  
    70.                           
    71.                     }  
    72.                     else//否则方向变量值为“down”,即菜单往下翻  
    73.                     {  
    74.                         if (num2 > num1)//如果此子元素按钮的名称序号大于本按钮的名称序号  
    75.                         {  
    76.                             bt.Top = btn.Top + btn.Height * count + this.panel1.Height;//此子元素按钮的纵坐标等于本按钮的纵坐标加上本按钮之下的几个按钮的高度之和  
    77.                             count++;//按钮个数加1  
    78.                         }  
    79.                     }  
    80.                 }  
    81.                  
    82.                   
    83.             }  
    84.         }  
    85.   
    86.         private void button3_Click(object sender, EventArgs e)  
    87.         {  
    88.             this.label1.Visible = false;  
    89.             this.label2.Visible = false;  
    90.             this.label3.Visible = true;  
    91.             this.label4.Visible = false;  
    92.             ChangeLocation(this.button3);  
    93.         }  
    94.   
    95.         private void button4_Click(object sender, EventArgs e)  
    96.         {  
    97.             this.label1.Visible = false;  
    98.             this.label2.Visible = false;  
    99.             this.label3.Visible = false;  
    100.             this.label4.Visible = true;  
    101.             ChangeLocation(this.button4);  
    102.         }  
    103.   
    104.         private void Form1_Load(object sender, EventArgs e)  
    105.         {  
    106.             this.label1.Visible = true;  
    107.             this.label2.Visible = false;  
    108.             this.label2.Location = this.label1.Location;  
    109.             this.label3.Visible = false;  
    110.             this.label3.Location = this.label1.Location;  
    111.             this.label4.Visible = false;  
    112.             this.label4.Location = this.label1.Location;  
    113.   
    114.             list.Add(button1);  
    115.             list.Add(button2);  
    116.             list.Add(button3);  
    117.             list.Add(button4);  
    118.         }  
    119.     }  
    120. }  


     程序下载地址:http://download.csdn.net/source/2409912

    展开全文
  • 这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议。...由于原声的winform界面美观性不够, 系统采用dotnetbar第三方控件来辅助编程。 首先...

    这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议。

    先说一下我们的权限管理的的设计思路,首先一个企业信息化管理系统一定会用到权限管理, 那么一个动态的菜单在企业信息化管理系统占有一定的分量。

    下面介绍我的一些思路。

    由于原声的winform界面美观性不够, 系统采用dotnetbar第三方控件来辅助编程。

    首先我们看红色方框部分为我们的动态模块功能。这样我们获得到了以下几个信息, 我们需要记录模块功能, 并且需要父子集关系, 那么对应的我们就需要在数据库中建立一张表来维护我们的动态菜单模块。我们举例命名为BaseModuleTabel, 那么会有一下的内容,Id ParentId Name,并且由于需要跟不同的用户有对应的关系, 我们还要建立用户以及菜单的关系表,来维护用户与菜单的权限关系。  

    这里就不介绍表的设计。我们先来看看在dotnetbar中如何呈现动态菜单逻辑。

    我们先从数据库中获取到所有菜单模块。并通过循环便利动态的加载模块按钮。 并添加对应的模块按钮事件,

     1         /// <summary>
     2         /// 加载菜单
     3         /// </summary>
     4         private void LoadMenu()
     5         {
     6             var parentEntity = _baseModuleBll.Repository().FindEntity("ParentId", "0");
     7 
     8             var result = _baseModuleBll.GetModuleList().Select(p => new BaseTreeViewMenuModel()
     9             {
    10                 Id = p.ModuleId,
    11                 ParentId = p.ParentId,
    12                 Name = p.FullName,
    13                 Class = p.Location,
    14                 Namespace = StringHelper.SubFirstChart(p.Location, '.'),
    15                 IsForm = p.Target == "iframe"
    16             }).ToList();
    17             RibbonTabItem ribbonTabItemFrist = null;
    18             var rabbonTabItemEntities = result.Where(p => p.ParentId == parentEntity.ModuleId);
    19             foreach (var ribbonTabItemEntity in rabbonTabItemEntities)
    20             {
    21                 var ribbonPanel = new RibbonPanel
    22                 {
    23                     Text = ribbonTabItemEntity.Name,
    24                     Dock = DockStyle.Fill
    25                 };
    26                 var ribbonTabItem = new RibbonTabItem
    27                 {
    28                     Text = ribbonTabItemEntity.Name,
    29                     Panel = ribbonPanel
    30                 };
    31                 if (ribbonTabItemFrist == null)
    32                     ribbonTabItemFrist = ribbonTabItem;
    33                 this.ribbonControlMenu.Controls.Add(ribbonPanel);
    34                 this.ribbonControlMenu.Items.Add(ribbonTabItem);
    35 
    36                 var ribbonBar = new RibbonBar { Text = ribbonTabItemEntity.Name };
    37                 var buttonItemEntities = result.Where(p => p.ParentId == ribbonTabItemEntity.Id);
    38                 foreach (var buttonItem in buttonItemEntities.Select(buttonItemEntitiy =>
    39                     new ButtonItem("ButtonItem" + buttonItemEntitiy.Name)
    40                     {
    41                         Text = buttonItemEntitiy.Name,
    42                         Tag = buttonItemEntitiy
    43                     }))
    44                 {
    45                     buttonItem.Click += ButtonItem_Click;
    46                     ribbonBar.Items.Add(buttonItem);
    47                     ribbonPanel.Controls.Add(ribbonBar);
    48                 }
    49             }
    50             this.ribbonControlMenu.SelectedRibbonTabItem = ribbonTabItemFrist;
    51 
    52         }
    53 
    54         #endregion

    当然我们的框架采用了反射机制来实现组件式开发。通常在一个项目里,为了降低耦合度,我一边将模块力度最小话,并将按一定的规则分类, 处理成摸个模块,在我们的系统中并不影响彼此开发的同时, 每个成员都可以独立的去完成自己的小任务, 说句不好听的, 就算是能力很差的新手,开发出来的耦合度极高的代码, 通过这样一种方式,他的影响范围也紧紧在与他的模块内, 并不影响其他模块操作。 仅作为个人的一种方式,当然通过我们的代码生成器,会生成一定的代码规范,这虽然能避免一些, 但起不到决定性的作用。 毕竟每个人的能力也是大不相同的。作为PM我们需要做的就是降低项目整体风险,按照规定的项目周期,制定完善的项目计划,系统模块划分力度越大,项目把控的越高。 

    下面打开点击模块按钮来,通过反射来实现对各个模块的初始化以及加载。代码效率目前开无太大障碍。当然如果一个模块dll你要弄个几百兆,那我也只能无语了。你的力度相对较小,会跟你反射的时间挂钩的。

     1         /// <summary>
     2         /// 打开模块菜单
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         private void ButtonItem_Click(object sender, EventArgs e)
     7         {
     8             var isOpened = false;
     9             var buttonItem = (ButtonItem)sender;
    10             var baseTreeViewMenuModel = (BaseTreeViewMenuModel)buttonItem.Tag;
    11             if (baseTreeViewMenuModel == null) return;
    12             if (!baseTreeViewMenuModel.IsForm) return;
    13             if (string.IsNullOrWhiteSpace(baseTreeViewMenuModel.Namespace)) return;
    14             //遍历现有的Tab页面,如果存在,那么设置为选中即可
    15             foreach (var tabitem in
    16                 superTabControlContent.Tabs.Cast<SuperTabItem>()
    17                 .Where(tabitem => tabitem.Name == "superTabItem" + baseTreeViewMenuModel.Name))
    18             {
    19                 superTabControlContent.SelectedTab = tabitem;
    20                 isOpened = true;
    21                 break;
    22             }
    23             if (isOpened) return;
    24             var dll = Application.StartupPath + "\\" + baseTreeViewMenuModel.Namespace + ".dll";
    25             if (!File.Exists(dll)) return;
    26             var assembly = Assembly.LoadFrom(dll);
    27             var type = assembly.GetType(baseTreeViewMenuModel.Class);
    28             if (type == null) return;
    29             var form = (FormBase)Activator.CreateInstance(type);
    30             form.ModuleId = baseTreeViewMenuModel.Id;
    31             form.FormBorderStyle = FormBorderStyle.None;
    32             form.TopLevel = false;
    33             form.Visible = true;
    34             form.Dock = DockStyle.Fill;
    35             var superTabItem = superTabControlContent.CreateTab(baseTreeViewMenuModel.Name);
    36             superTabItem.Text = baseTreeViewMenuModel.Name;
    37             superTabItem.Name = "superTabItem" + baseTreeViewMenuModel.Name;
    38             superTabItem.AttachedControl.Controls.Add(form);
    39             superTabControlContent.SelectedTab = superTabItem;
    40         }
    41          
    42         #endregion

    通过以上的代码我们就可以实现如下图所示的动态菜单功能 。

    分享是美德,要提倡!

     

    Winform快速开发平台系列:

    官网连接

    1.winform快速开发平台 -> 让有限的资源创造无限的价值!

    2.winform快速开发平台 -> 基础组件之分页控件

    3.winform快速开发平台 -> 绑定ComboBox数据控件

    4.winform快速开发平台 -> 工作流组件(仿GooFlow)

    5.winform快速开发平台 -> 通用权限管理之动态菜单

    转载于:https://www.cnblogs.com/liuyunsheng/p/5375748.html

    展开全文
  • 基于Winform开发的Ribbon控件 普通按钮 下拉按钮 复选框 应用菜单 面板折叠等功能 由于自定义开发 不需要额外的第三方资源的依赖 完全属于Winform资源 放心使用
  • C# WinForm项目打包

    2013-10-20 22:07:25
    新建一个C#安装项目,点击左边应用程序文件夹,在右面空白处右键添加文件,将.exe文件,dll文件,第三方组件等全部添加进去,可以在.exe文件上右键创建快捷方式,然后添加到用户的”程序“菜单和用户桌面上,然后...

    数据库:SQL Server2005

    新建一个C#安装项目,点击左边应用程序文件夹,在右面空白处右键添加文件,将.exe文件,dll文件,第三方组件等全部添加进去,可以在.exe文件上右键创建快捷方式,然后添加到用户的”程序“菜单和用户桌面上,然后项目上右击,属性->系统必备->选择安装系统必备组件,.Net 3.0兼容.Net 2.0,VS2008一般是.Net 3.5框架,然后确定,生成解决方案。

    对于数据库,其中的appconfig配置文件对应于:应用程序名+exe+config文件,发布出来之后可以直接修改这个配置文件即可,也可以通过程序修改配置文件,需要再建一个类库项目,具体详见:http://www.cnblogs.com/scottckt/archive/2011/05/14/2046313.html 










    展开全文
  • winform安装部署的问题

    2012-11-06 17:36:00
    1.安装文件中涉及到某些第三方ocx的自动注册 解决方案:展开 检测到的依赖项 选中需要自动注册的ocx控件,属性窗口,修改 Register 为vsdrfCOMSelfReg 2.安装时,需要在桌面或者开始菜单中添加快捷方式 解决方案...
  • 当查询结果记录集条数较多时一般采用分页显示,目前再使用不同程序语言进行信息系统开发时都可直接调用各类程序自带或者第三方组件实现分页显示功能。本文主要针对培训需求自己编写分页显示功能。首先给出分页显示...
  • 第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成。在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念具体如图红色部分 ...
  • 最近在写HR系统用到的第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成。在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念...
  • 第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成。在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念具体如图红色部分 ...
  • 制作折叠菜单

    千次阅读 2012-02-08 09:39:47
    在照抄一个现成的软件界面,...貌似有一些第三方的控件可以实现,而且具有简单易用,效果优良等特点,但是需要破解,没用过第三方控件,也顾忌其稳定性,所以就放弃了 然后就是用button+panel/listview, 或者是menust
  •  实例011 为项目添加第三方控件 12 实例012 为项目添加已有窗体 13 第2章 C#语言基础应用 15 2.1 代码的注释 16  实例013 对单行代码进行注释 16  实例014 快速对多行代码进行注释 17  实例015 使用...
  • 实例011 为项目添加第三方控件 实例012 为项目添加已有窗体 第2章 C#语言基础应用 2.1 代码的注释 实例013 对单行代码进行注释 实例014 快速对多行代码进行注释 实例015 使用“///”标记给代码段添加说明 2.2...
  • 实例011 为项目添加第三方控件 实例012 为项目添加已有窗体 第2章 C#语言基础应用 2.1 代码的注释 实例013 对单行代码进行注释 实例014 快速对多行代码进行注释 实例015 使用“///”标记给代码段添加说明 2.2...
  • 实例011 为项目添加第三方控件 实例012 为项目添加已有窗体 第2章 C#语言基础应用 2.1 代码的注释 实例013 对单行代码进行注释 实例014 快速对多行代码进行注释 实例015 使用“///”标记给代码段添加说明 2.2...
  • 在开发Winform应用程序时,为了界面美观比较简单的方式就是使用皮肤第三方控件,而业界做的比较好的,应用很广泛的就数DevExpress了。先看以下皮肤的实现效果。 实现效果 看几张截图吧 以上3张图是3中主题。 可以...
  • 常用 Convert 方法有: 2页 C#(WINFORM)学习 C# Convert.ToBoolean Convert.ToByte Convert.ToChar Convert.ToDateTime Convert.ToDecimal Convert.ToDouble Convert.ToInt16 Convert.ToInt32 Convert.ToInt64 ...
  • 代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站调优、采集器、RSS/XML、网站防黑(防XSS攻击、防注入漏洞攻击、防CC攻击、...分析、第三方脚本嵌入(广告、统计代码、内容联盟等)、图片服务器分离...
  • 实例011 为项目添加第三方控件 13 实例012 为项目添加已有窗体 14 第2章 C#语言基础应用 15 2.1 代码的注释 16 实例013 对单行代码进行注释 16 实例014 快速对多行代码进行注释 17 实例015 使用“/”标记给代码段...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

winform第三方菜单