学习笔记:VB.net动态添加控件数组并传递事件

  • 控件数组和事件
  • “中间人”
  • 动态添加控件

控件数组和事件

新建一个用户窗体,在定义控件数组时,不能用Withevnets来定义数组

即使可以,为每一个数组成员编写事件也是非常麻烦的,考虑通过一个“中间人”来传递事件

“中间人”

用继承的方法为Button控件增加一些事件、属性和方法

Public Class MyButtonInherits System.Windows.Forms.ButtonPublic BtPtr As MyButton = MePublic BtNo As LongPublic Event MyEventMouseClick()Public Sub RaiseMyEventMouseClick(No As Long)BtNo = NoRaiseEvent MyEventMouseClick()End SubPrivate Sub MyButton_MouseClick() Handles Me.MouseClickBtPtr.RaiseMyEventMouseClick(BtNo)End Sub
End Class

这里BtPtr是一个指针,每当新的实例一个MyButton控件的时候,让其指向某个特定的不在数组中的Button控件(这个控件在面板上不显示出来),这个特定的Button控件用来传递MouseClick事件
BtNo记录了这个实例MyButton所在数组的序列号

每当按键的MouseClick事件触发时,便会调用BtPtr的RaiseMyEventMouseClick方法来触发BtPtr的MyEventMouseClick事件并传递按键的代号BtNo

动态添加控件

新建一个窗体Form1,添加按钮Button1,并填写如下代码:

Public Class Form1Dim WithEvents Bt As New MyButtonDim BtArr(10) As MyButtonDim i As Long = 0Dim p As PointPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickIf Not i > 10 ThenBtArr(i) = New MyButtonBtArr(i).BtNo = iBtArr(i).BtPtr = BtBtArr(i).Text = "按钮" & ip.X = 40p.Y = 40 + 30 * iBtArr(i).Location = pMe.Controls.Add(BtArr(i))i = i + 1End IfEnd SubPrivate Sub Bt_MyEventMouseClick() Handles Bt.MyEventMouseClickMessageBox.Show("按钮" & Bt.BtNo & "按下了")End SubEnd Class

Bt是一个MyButton控件,但并不在窗体上显示出来,所有实例化的BtArr()成员中的BtPrt都会指向Bt
当Bt的MyEventMouseClick事件触发时,便会显示是几号按钮被按下了。

学习笔记:VB.net动态添加控件数组并传递事件相关推荐

  1. asp.net动态添加控件学习

    看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页 ...

  2. vs2010 学习Silverlight学习笔记(8):使用用户控件

    概要: 这个类似于封装控件样式.不过封装的是整个或是多个控件罢了,然后用的时候就可以直接引用过来了. 创建用户控: 这个也很简单,不过有几个地方需要注意下.这个就不照抄了,咱们也自己写一个. 步骤: ...

  3. 关于页面动态添加控件(转)

    最近看到很多问题都是关于页面动态添加控件,页面postback以后,就取不到这些控件了.其实每次在页面上动态添加控件(或者在数据控件上动态添加列),它们的状态是不会被添加到页面的ViewState中去 ...

  4. 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)

    前言:以前曾写过一篇关于动态生成控件的文章<动态添加控件及将某XML动态加入到Activity显示>,比较浅显,对于RelativeLayout的相关布局设置方法及相对布局与线性布局的混合 ...

  5. 动态添加控件及将某XML动态加入到Activity显示

    一.动态添加控件.设置参数 这个难度比较大,放在前面讲,用的也比较多,普通情况下,我们会提前把布局XML写好,然后对XML中的元素进行设置,但这种方法在有些情况下就显得不适合,比较聊天应用,比如帖子的 ...

  6. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  7. Android 在布局容器中动态添加控件

    这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...

  8. ASP.Net学习笔记002--ASP.Net服务端控件做了什么2

    ASP.Net学习笔记002--ASP.Net服务端控件做了什么2 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交 ...

  9. Windows phone7 动态添加控件

    Windows phone7 动态添加控件 2011-03-29 3:48 using System; using System; using System.Collections.Generic; ...

最新文章

  1. AI一分钟 | 阿里与南洋理工成立AI联合研究院;传蔚来汽车拟赴美IPO,融资20亿美元
  2. java集合框架史上最详解(list set 以及map)
  3. 版本控制:SVN和GIT的一些使用感受
  4. 云服务器mqtt协议,云服务器mqtt协议
  5. Spring MVC 使用介绍(二)—— DispatcherServlet
  6. 基于Text-CNN模型的中文文本分类实战
  7. 51nod 1275 连续子段的差异(twopointer+单调队列)
  8. BiTree T 和 Bitree T 和 BitNode *T 和 T-lchild
  9. 基于MM32与M26物联网入门:远程呼叫及开锁
  10. win7不显示移动硬盘_Mac 下移动硬盘异常退出修复
  11. Leetcode高频题目整理(更新)
  12. C文件操作——设置文件的位置指示器fseek函数(一般用于二进制文件)
  13. 音频技术及行业的发展
  14. oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载
  15. 【进阶四】Python实现(MD)HVRP常见求解算法——蚁群算法(ACO)
  16. 23岁那年你正处在哪个状态?现在呢?
  17. 智能手机技术的发展与剖析
  18. Cisco Packet Tracer(静态路由配置+默认路由)
  19. 初窥构建之法——记2020BUAA软工个人博客作业
  20. vue端计算大文件的sha256

热门文章

  1. 计算机主机爆炸,「技术向」如何让你的电脑在十秒钟后爆炸!
  2. 《鬼吹灯》作者申请“鬼吹灯”商标,为什么还会被驳回?
  3. 模拟电影胶片、梦幻系列、喜怒无常的电影胶片、Lightroom预设合集【61】
  4. C# Socket编程实现简单的局域网聊天器
  5. 翌加:抖音带货的具体途径有哪些呢
  6. ultimate grid_Ultimate Kubernetes资源规划指南
  7. Office2016是否激活,Office2016是否永久激活
  8. go iris框架 常见错误1: cannot use func literal type func报错记录 解决方案
  9. 怎样做一个有想法的人-《思考的艺术》读后感
  10. 计算机桌面图标怎么改,小编教你电脑如何更改桌面图标