运行时添加事件(使用addHandler)

我想用这个例子显示的几件事情......但主要原因之一是如何将事件添加到组的控件在运行时在Visual Basic。NET。

例如,我们需要许多控制TextBox的(无论怎样,他们被称为问题)的一种形式。 像我做了什么可以做的事情。

每次Visual Studio的设计师给你双击一个控件创建一个子例程将负责管理事件。 在TextChanged事件和Visual Studio设计一个文本框默认的情况下将创建子程序称为TextBox1_TextChanged但在现实中的名字并不重要,我们可以改变它,什么都不会发生。 最重要的事情是在该行的末尾是:“处理TextBox1.TextChanged”。 这表明“管理”的常规事件TextBox1.TextChanged。

我们可以在运行时分配这些“处理程序”,在这个例子中,我们可以这样做多个控件使用相同的功能。

进入其他处理程序的语法是:

 AddHandler的Objeto.Evento,厂址MiRutina

并删除处理程序:

 RemoveHandler Objeto.Evento,厂址MiRutina

veramos现在的问题,例如:在这个例子中是什么AREM添加每个TextBox控件,我们在窗体上有两个事件。 这些事件的GotFocus(发生时需要重点控制)和LostFocus(控件失去焦点时发生)。 当控制的重点是要改变背景颜色,在这种情况下,一个黄色的。 而当你失去你回到正常的颜色。
第一件事就是要添加的AREM这两个例程。

 ConFoco私人小组(BYVAL发件人作为对象,BYVALé作为System.EventArgs)
     DirectCast的(发件人,文本框)。的BackColor = Color.Yellow
 END SUB

 SinFoco私人小组(BYVAL发件人作为对象,BYVALé作为System.EventArgs)
     DirectCast的(发件人,文本框)。的BackColor = Color.White
 END SUB

通常情况下,我们有两个程序,但还是......没有人叫他们。 为此,我们需要添加窗体上的每个控制TextBox的调用处理函数泰晤士报。

在窗体的Load事件中添加以下代码:

对于每个对象ç(Me.Controls)
     ,如果c.GetType的GetType(文本框)
         GotFocus事件的AddHandler DirectCast的(C,文本框)。,厂址conFoco
        厂址sinFoco的LostFocus的AddHandler DirectCast的(C,文本框)。
    结束如果
未来

和魄力,我们可以测试程序和不需要别的。 所有TextBox改变你的背景颜色,采取重点。 没有他们所谓的有多少人或任何事。

在下面的图片是在运作的形式:

我认为它值得解释一下最后一个代码。
为每个运行在所有

36“添加运行时事件(使用addHandler)”

  1. Bitacoras.com 说:

    信息Bitacoras.com ...

    率在Bitacoras.com:我要显示这个例子中的几件事情? 但主要原因之一是如何添加组在运行时的控件在Visual Basic中的事件。净。 例如,我们需要许多控件窗体....

  2. 何塞·安东尼奥说:

    谢谢! 代码清洁,简单,功能。 你是一个现象。 我在VB6中使用控件数组,这些东西(如小姐...),但与优雅的解决这个小动作。

  3. 爱德华多·埃尔南德斯萨恩斯说:

    感谢这个杰出的贡献,我在VB6开发8年,还没有找到一种方法,做净如写一个所有TexBox表的单一事件,他在VB6的控件数组,并确定了每个通过在索引。 有了您的支持,甘克服这个困难。 感谢

  4. 费尔南多说:

    你好,很好的解释。 使用AddHandler,我想一个有趣的工具,但我有一个关于它的问题。 我在asp.net中使用,它的伟大工程,我添加事件动态链接流派,但只有当负载的AddHandler。 有什么办法,它的作品不负载吗?
    感谢一切

  5. 何塞说:

    超好此代码可以节省很多的线,和时间。

  6. 何塞说:

    你可以做类似的东西,但只是数字等,以验证在KeyPress,但不知何故确定每个文本框知道谁申请格式必须是唯一的号码,文字等。 我希望我做你的观点。

  7. 法昆多说:

    你好,我喜欢你的网站和欣赏你的奉献精神,在后。 我目前就读于大学和帮助。

    的问候!

  8. shocksue说:

    你好良好的代码,但我申请另一个控制和另一个事件,它发生的时候,当我说:
    AddHandler的miObjeto.evento,厂址miRutina
    告诉我,该方法“mirutina”具有相同签名的委托。
    在你的例子,你不是你送他委托的参数,并为你工作,这可能会发生在我身上吗?
    谢谢您的帮助......

    • 以利沙说:

      这是真的,我发送的参数,因为他们要送什么(它们被发送到控制触发事件),但必须在定义的过程调用。 例如:私人,小组MiRutina(作为对象,BYVALé作为System.EventArgs的BYVAL发件人)。

      运气

  9. PreguntadorVB说:

    嗨,这是一个很好的例子使用的AddHandler,并添加控件的形式。

    这就是为什么我要加入代码在运行时创建的控件添加事件我有点贡献。

    打了招呼。

    ----------------

    PulsadoDobleClick私人小组(BYVAL发件人为对象,作为System.EventArgs BYVALé)
    MSGBOX(“您按下双击”)
    END SUB

    小组将Form1_Load(0 System.Object的,BYVAL e由于发件人)把手MyBase.Load
    由于新的TextBox点心MiCajaDeTexto()
    MiCajaDeTexto.Name =“CajaDeTexto”
    Me.Controls.Add(MiCajaDeTexto)
    的AddHandler Me.Controls(MiCajaDeTexto.Name)的DoubleClick的,厂址Me.PulsadoDobleClick
    END SUB

  10. 费尔南多说:

    感谢您的帮助,我带来了麻烦。 我来自VB6的是非常不同的,我读的地方,微软打算在新的VB.NET版本中,他们以同样的方式在VB6中处理包括新的阵列控制。 这将使生活更容易对我们这些老VB6的。

  11. 亚历杭德罗·孔特雷拉斯说:

    优秀的,我只是添加评论上分配的功能参数的可能性。

  12. 威尔顿说:

    伟大的套路,为那些仍然从VB6迁移到很大的帮助。网,谢谢
    '**使用的只读属性,在一个给定的GroupBox的编辑框**

    例如,在我的项目:

    小组将Form1_Load(0 System.Object的,BYVAL e由于发件人)把手MyBase.Load

    “查找文本框在一个GroupBox
    对于每个管制作为在Me.grpDatosPasajero.Controls的ç

    ,如果c.GetType的GetType(文本框)

    (C,文本框)。的AddHandler DirectCast的输入,厂址conFoco
    (C,文本框)。的AddHandler DirectCast的离开,厂址sinFoco

    结束如果

    未来

    END SUB

    “套路
    ConFoco私人小组(BYVAL发件人作为对象,BYVALé作为System.EventArgs)

    如果不DirectCast的(发件人,文本框)。只读然后

    DirectCast的(发件人,文本框)。的BackColor = Color.PaleGoldenrod
    结束如果

    END SUB

    SinFoco私人小组(BYVAL发件人作为对象,BYVALé作为System.EventArgs)

    如果不DirectCast的(发件人,文本框)。只读然后
    DirectCast的(发件人,文本框)。的BackColor = Color.White
    结束如果

    END SUB

    WAV

  13. VB MIK说:

    exelentes的代码jejej朋友,我不得不承认。 在及时garacias。 问候

  14. ALE说:

    我共享此代码relize与帮助他的笔记,这将有助于我创造所有你需要的按钮和发送的功能按钮的条件,光从一个单一的事件

    公共类Form1
    的暗淡lbls()As按钮
    小组将Form1_Load(0 System.Object的,BYVAL e由于发件人)把手MyBase.Load
    昏暗的LOC作为整数= 25
    由于整数m = 0 4
    ,ReDim保护区lbls(M)
    lbls(M)=新按钮
    与lbls(M)
    文本=(“按钮”&M)
    位置=新点(0,LOC)
    尺寸()=新System.Drawing.Size(75 23)
    结尾
    lbls(M)。= M
    Me.Controls.Add(lbls(M))
    AddHandler的Me.Controls(lbls(米)。名)。点击,厂址Me.Click
    同上+ = 25
    未来
    END SUB

    私人小组按(BYVAL发件人为对象,作为System.EventArgs BYVALé)
    昏暗的j的按钮=发件人
    MSGBOX(“你按下按钮”及j.Name)
    END SUB
    末级

    我希望将一些

  15. 胡利奥·洛佩斯说:

    我想创建一个TabPage的,并在运行时的DataGridView,和Q在此添加这些控件在设计时,如果有人知道如何做到这一点,我感谢您的帮助。

  16. 胡利奥·洛佩斯说:

    我想创建一个TabPage的,这是一个在运行时的DataGridView内,并且这些控件添加到屏幕basic.net视觉设计,如果有人知道如何做到这一点,我感谢您的帮助。

  17. pepelepu说:

    holas! 大家好! 这里发生的事情是给所有TextBox的属性:
    对于每个对象ç(Me.Controls)
    但如果kiero例外某些控件像我一样......例如一个按钮kiero填补我的几个音符txtbox学生的形式,但也有其他如代码txtbox,命名后平均kiero utlizo的笔记
    点心(n)为双
    暗淡Ç作为控制
    对于每个在Me.Controlsç
    如果TypeOf运算c是文本框,然后
    总和(VAL(c.Tag))= VAL(c.Text)
    结束如果
    未来
    对于每个在Me.Controlsç
    昏暗,我作为整数
    如果TypeOf运算c是标号,则
    如果c.Tag> = 0
    如果VAL(c.Tag)= I
    c.Text = SUM(I)/ VAL(txtnn.Text)
    I + = 1
    结束如果
    结束如果
    结束如果
    但我采取一切和平均txtbox的出错

  18. mekano说:

    pepelepu,尝试这样exluir:

    ...
    对于每个在Me.Controlsç
    选择的情况下c.Name
    “控制排除
    案“nameControl1”,“nameControl2”nameControl3“
    循环
    其他情况
    “我控制控制
    总和(VAL(c.Tag))= VAL(c.Text)
    最终选择
    未来

  19. 莫塔JR说:

    问候,非常有趣的代码。

    我有一个问题要问你,我已经开发出一个MenuStrip,从数据库中读取项目,不是我不能,即使分配一个处理器或事件过程MenuStrip控件中的每个元素或检索数据库程序的名称以及一些sugenrencia? 我使用的例子文件,可以发现在潜艇网址: http://www.dotnethelp.co.uk/es/vb/108413/menu_strip_vbnet
    感谢您的建议

  20. 丹尼尔说:

    我要疯了不能够与这里的射击,直到事件,并宣读

    “在窗体的Load事件中添加以下代码:

    我只是缺少它,有时我迷路了明显的事情,感谢XD

  21. 埃德加说:

    我刚开始的事件和处理程序,我认为它是复杂的(我),但良好的人贡献自己的知识,我们谁principiamos ...感谢您以利沙和所有包括其位。

    的问候!

  22. 耶稣说:

    我是新来这个,我觉得很有意思,非常好你的榜样,怎么能公开,并可以调用任何形式...谢谢

  23. 罗米纳说:

    听到一个问题,如果我可以帮助。
    我必须做一个程序来控制的游戏与运动键,我想知道如何分配键按钮,放,从上到下,左,右,当你按下按钮按下做模拟。

  24. 塞萨尔说:

    亲爱的,查询,我怎么能传递参数的功能,你在addessOf表示,函数有一个参数(如IDBOTON),并为每一个按钮,我创建我期待在BD与IDBOTON信息。

    非常感谢您的帮助。

  25. poncianux说:

    我得知此前不久(1天)LOL但它似乎复杂,是很容易,甚至打电话的功能范围从SQLCE的问候!

  26. 路易斯说:

    您好,很有趣,我希望他们能告诉我如何将此代码添加在运行时在C#中的事件。
    谢谢,也是我在运行时创建的PictureBox添加Click事件。
    谢谢

  27. 哈维尔说:

    很简单,但非常实用。 非常感谢

  28. 海德尔说:

    您好,出色。 我有一个问题,这个代码可以直接放置在窗体上的控件。 但是,它没有代码为每个容器放置在窗体的Load集装箱?

    • 以利沙说:

      你可以创建一个递归函数来检查,如果控制又被称为。
      然后,我离开你举个例子,我想澄清,我没有测试时间不足,但想回答你,我离开你这里。
      使用功能的基础。 运气。

      私人小组将Form1_Load(BYVAL发件人作为对象,BYVALé作为System.EventArgs)处理Me.Load
      recorrerContenedores(我)
      END SUB

      小组recorrerContenedores(BYVAL c由于控制)
      如果c.Controls.Count> 0,则
      recorrerContenedores(三)
      其他
      “添加把手
      结束如果
      END SUB

  29. 希伯说:

    您好亲爱的,我想知道如果我错过了一个文档的一部分,因为在年底,当我读它似乎你要解释一点点代码,是这样的:

    我认为它值得解释一下最后一个代码。
    为每个运行在所有...

    缺少的东西吗? 你可以完成它若有? 谢谢你,祝贺你,你的贡献,使社会的VB

  30. 胡安·卡洛斯说:

    你好estubo buenaso,但我有一个问题,你是否意识到你的项目工作,所以我kiero我添加“按钮,按最近她开始失去了焦点功能的加载形式,我的问题是....我不想每个文本框..帮我,SIP porfa reponde上越早感谢......
    saludosss ....

    • 以利沙说:

      不一定必须使用AddHandler负载......无论你想,你可以把它。 除此之外,你可以使用(如需要)事件控制的关联RemoveHandler语句。

  31. 马里奥说:

    wooow! 这我已经取得了巨大的帮助,我感谢你,真的。 但当然我不能^ ^问候!

评论