C#自定义控件、用户控件、动态加载菜单按钮
一、效果图,动态加载5个菜单按钮;

二、实现方法
1、创建用户控件
2、在用户控件拖入toolStrip
3、进入用户控件的Lood事件,这里自动添加5个选 ToolStripMenuItem,后期大家自己可以扩展这个方法。
自定义控件效果图:

/// <summary>
/// 控件加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LanMenu_Load(object sender, EventArgs e)
{
for (int i = ; i <; i++)
{
ToolStripMenuItem Nbi = new ToolStripMenuItem();
Nbi.Text ="测试"+i;
Nbi.Name ="TStest"+i;//按钮名称
Nbi.Click += Nbi_Click;
this.toolStrip1.Items.Add(Nbi);
}
}
/// <summary>
/// ToolStripMenuItem 动态添加的 每个按钮的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Nbi_Click(object sender, EventArgs e)
{
if (UserControlMenuItemClick != null)
UserControlMenuItemClick(sender, e);
}
4、定义委托和事件
//定义事件
public event StripMenuItemClick UserControlMenuItemClick;
//定义委托
public delegate void StripMenuItemClick(object sender, EventArgs e);
5、将自定义控件拖到窗体里面效果图:
这些测试按钮,是在第三点的时候添加的,后期可以不要第3点的添加按钮的方法,可以设计数据库,或者其他文件里面读取数据,自动添加按钮。

6、自定义控件里面的每一个按钮的点击事件,在自定义控件属性事件里面找到我们定义的控件,双击进入。

编辑代码:
/// <summary>
/// 自定义控件里面的按钮的点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lanMenu1_UserControlMenuItemClick(object sender, EventArgs e)
{
//获取当前点击的是自定义控件里面的哪一个按钮
ToolStripMenuItem Nbi = (ToolStripMenuItem)sender;
//弹出按钮的名称、按钮上面的文本
MessageBox.Show(Nbi.Name + ":" + Nbi.Text);
}
7、最终显示效果:
点击“测试0按钮”

点击“测试1按钮”

我的TB地址:https://shop115363898.taobao.com/?spm=a313o.7775905.1998679131.d0011.NJTv4h
C#自定义控件、用户控件、动态加载菜单按钮的更多相关文章
- Delphi7 第三方控件1stClass4000的TfcImageBtn按钮控件动态加载jpg图片例子
Delphi7 第三方控件1stClass4000的TfcImageBtn按钮控件动态加载jpg图片例子 procedure TForm1.Button1Click(Sender: TObject); ...
- Asp.net 的DropDownList 控件动态加载
在做连接数据库表,在页面上用DropDownList 下拉框查询某条数据时,因为数据库里的数据,随时都有可能增加或减少,而下拉框关联的某个字段的值并不一定是固定的. 表信息: CREATE TABLE ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
原文:重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 Web ...
- easyui控件的加载顺序
使用easyui做布局时,会模仿窗口程序界面,做出一些较复杂的布局.按由外层到内层的顺序: (最外层)panel->tabs->tabs1 ->tabs2->layout-&g ...
- 使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体
使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体 [csharp] view plaincopyprint? <SPAN ...
- Excel催化剂开源第7波-VSTO开发中Ribbon动态加载菜单
在VS开发环境中,特别是VSTO的开发,微软已经现成地给开发者准备了设计器模式的功能区开发,相对传统的VBA.ExcelDna和其他方式的COM加载项开发来说,不需要手写xml功能区,直接类似拖拉窗体 ...
- C#遍历XML文件动态加载菜单
通过遍历XML文件动态加载菜单,顺便利用WebBrowser控件实现一个简单的桌面浏览器 效果如下: 代码如下: XMLFile1.xml <?xml version="1.0&quo ...
- Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单
动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的. 我们在这里就用上一篇准备好的数据格式Mock出模拟数据,然后动态生成我们的导航菜单. 接口 ...
- Vue + Element UI 实现权限管理系统(动态加载菜单)
动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的. 我们在这里就用上一篇准备好的数据格式Mock出模拟数据,然后动态生成我们的导航菜单. 接口 ...
随机推荐
- eclipse遇到的问题
引用不了R文件,可能是导包导错了cannot be resolved or is not a field:首先检查你的XML是否保存了,再检查你的import导入的R文件是你包名+R还是android ...
- LabVIEW(一):知识入门
一.DAQ基础知识简介 1.DAQ是英文Data Acquisition (数据采集)的缩写. 数据采集(DAQ)是指测量:电压.电流.温度.压力.声音.编码数据等电气或物理现象的过程. 2.数据采集 ...
- vsftp搭建文档
vsftpd端口的作用:控制连接:tcp21端口用于发送FTP命令数据连接:tcp20端口用于上传下载数据 传输模式:分为主动模式和被动模式主动模式是当需要传输数据时,客户端以PORT命令告知服务器, ...
- dubbo集群容错解决方案
dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. ...
- mysql原生sql盘点
select*from (select*from test1 union all select*from test2 ) //两个查询的数据行数需要对应一致,且名字as 一致. 1.如果直接用如下sq ...
- ubuntu16.04 下使用vscode备忘录
微软的vscode是为程序员做了非常大贡献,其强大的功能和各个平台的可移植性给vscode带来了非常大的火力.在程序员的世界中非常的流行,算是一线明星了. 我把使用过程中遇到的一些问题做个记录,方便自 ...
- SPA架构的优点和缺点以及一些思考
SPA是什么? 全称是单页面应用. 一个SPA就是一个WEB应用,它所需的资源(HTML CSS JS等),在一次请求中就加载完成,也就是不需刷新地动态加载. 用术语“单页”就是因为页面在初始化加载后 ...
- 告诉你,Spring Boot 真是个牛逼货!
现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...
- [工具]K8tools github/K8工具合集/K8网盘
K8tools 20190428 声明: 工具仅供安全研究或授权渗透,非法用途后果自负. 博客: https://www.cnblogs.com/k8gege 下载: https://github.c ...
- TCP/IP 笔记 - TCP保活机制
TCP协议中不存在轮询机制,这意味着加入启动一个客户端进程,与服务器建立连接后,然后离开几小时.几天.甚至几个月,连接依然会保持着.理论上,中间路由器可以崩溃和重启,数据线可以断开再连接,只要连接两端 ...