如何从控件对象获取单击事件 [英] How can I get a click event from a control object

查看:82
本文介绍了如何从控件对象获取单击事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,你好吗?

祝你有美好的一天。



我正在尝试编写Web解决方案代码添加一些WebUserControls dinamically并cacht他们的Click事件。我读了一些像这样的论坛,我发现为此我需要从我的Control中委派我的click事件,然后通过 AddHandler AddressOf 指示我的Default。 aspx文件。



嗯,这一步一切顺利。但是当我单击Control中的任何按钮时,我得到一个System.InvalidCastException错误消息(HResult = 0x80004002),表示无法将System.Web.UI.HtmlControls.HtmlGenericControlobject对象类型转换为MyControl对象。 br />


它从我的Default.aspx文件中引用了我点击事件的具体指示:



 Dim laFiguraSeleccioanda As MiControl = DirectCast(DirectCast(发送者,按钮).Parent,MiControl)





这是来自My Control文件的click事件的调用,带有以下指示:



 RaiseEvent EventoPublico_Click(sender,e)





有人可以帮帮我吗?如何从MyControl文件中捕获click事件,并在Default页面上执行一些声明?



我让所有人在ASPX.VB上构建我的代码,这样你就可以了更清楚我的意思。



这是一个屏幕截图 ---> ScreenShot



祝大家一切顺利,我重申我的问候,并提前感谢您的关注和帮助。



我的尝试:



Default.aspx



 <%@     Page    语言  =  VB    AutoEventWireup   =  false     CodeFile   = < span class =code-keyword> Default.aspx.vb   继承  =  _默认   %>  
<%@ 注册 Src = 〜/ App_Controls / MiControl.ascx TagPrefix = CJS TagName = Figura %>
< head runat = server >
< 标题 > 事件单击con delegado < / title >
< meta http-equiv = 内容类型 content = text / html; charset = utf-8 / > ;
< link href = StyleSheet.css type = text / css rel = stylesheet / >
< / head >
< 正文 >
< 表单 id = form1 runat < span class =code-keyword> = server >
< div runat = server >
< asp:PlaceHolder ID = PlaceHolder1 runat < span class =code-keyword> = server > < / asp:PlaceHolder >
< / div >
< br / >
< < span class =code-leadattribute> div runat = server class = Texto < span class =code-attribute> style = clear:left >
< asp:标签 ID = lbResultado runat = server 文字 = Esperando un Click .. > < / asp:Label >
< / div >
< < span class =code-leadattribute> / form >
< / body >





Default.aspx.vb



 Partial Class _Default 
继承System.Web.UI.Page
Private Sub Form1_Load(sender As Object,e As EventArgs)处理form1.Load
For i As Integer = 1 To 3
Dim laFigura As MiControl = LoadControl(〜/ App_Controls / MiControl.ascx )
AddHandler laFigura.EventoPublico_Click,AddressOf LaFigura_Click
PlaceHolder1.Controls.Add(laFigura)
laFigura.SuNombre =Cuadrito 0& i
下一个
结束子

受保护的子LaFigura_Click(ByVal发送者作为对象,ByVal e As EventArgs)
Dim laFiguraSeleccioanda作为MiControl = DirectCast(DirectCast(发送者,按钮) ).Parent,MiControl)
lbResultado.Text =Hiciste click en el& laFiguraSeleccioanda.SuNombre
End Sub
End Class





MiControl.ascx

 <%@    控制   语言  =  VB    AutoEventWireup   =  false    CodeFile   =  MiControl.ascx.vb   继承  =  MiControl   %>  
< link href = ../ StyleSheet.css type = < span class =code-keyword> text / css rel = 样式表 / >
< asp:Panel ID = Cuadrito CssCl ass = Cuadrito Centro runat = server < span class =code-keyword>>
< div runat = 服务器 >
< asp:标签 ID = lbCuadrito CssClass = Texto 文字 = 控制 runat = 服务器 > < / asp:标签 >
< / div >
< div runat = server >
< asp :按钮 ID = btnCuadrito runat = server 文字 = 点击 / >
< ; / div >
< / asp:Panel >





MiControl.ascx.vb

 Partial Class MiControl 
Inherits System.Web程序。 UI.UserControl

Public Delegate Sub Delegado_EventoClick(ByVal sender As Object,ByVal e As System.EventArgs)
Public Event EventoPublico_Click As Delegado_EventoClick
Public Property SuNombre As String
获取
返回lbCuadrito.Text
结束获取
设置(值为字符串)
lbCuadrito.Text = value
结束集
结束物业
Private Sub btnCuadrito_Click(sender As Object,e As EventArgs)Handles btnCuadrito.Click
RaiseEvent EventoPublico_Click(sender,e)
End Sub

End Class







错误信息:

< pre lang =text>发生了System.InvalidCastException
HResult = 0x80004002
Message = No se puede convertir un objeto de tipo'System.Web.UI.HtmlControls.HtmlGenericControl'al tipo'MiControl'。
Source = App_Web_tumekcyd
StackTrace:
at _Default.LaFigura_Click(Object sender,EventArgs e)在D:\ Mis documentos \ Ejemplo 03 - Evento点击con delegado\Default.aspx。 vb:第14行
在MiControl.btnCuadrito_Click(Object sender,EventArgs e)中的D:\ Mis documentos \ Ejemplo 03 - Evento Click con delegado\App_Controls\MiControl.ascx.vb:第16行

解决方案

按钮的父级是< div> ,而不是用户控件。



您可以使用按钮的 NamingContainer

 Dim laFiguraSeleccioanda As MiControl = DirectCast(DirectCast(发送者,控制).NamingContainer,MiControl)



或者,您可以修改引发事件的代码,以便它通过正确的发件人:

 Private Sub btnCuadrito_Click(sender As Object,e As EventArgs)处理btnCuadrito.Click 
RaiseEvent EventoPublico_Clic k(Me,e)
End Sub



这将简化处理程序:

 Dim laFiguraSeleccioanda As MiControl = DirectCast(发件人,MiControl)


Hello to everyone, How are you?
Have a great day.

I'm trying to code a Web Solution to add some WebUserControls dinamically and cacht their Click Event. I read some forums like this and I found out that for that it was necesary to Delegate my click event from my Control and reasign thru AddHandler and AddressOf instructions on my "Default.aspx" file.

Well, to this step everything goes fine. But when I click any button from my Control I got a System.InvalidCastException Error Message (HResult=0x80004002) that says that is not possible convert a "System.Web.UI.HtmlControls.HtmlGenericControlobject" Object Type to "MyControl" Object.

It makes reference to an especific instrucction on my click event from my "Default.aspx" file:

Dim laFiguraSeleccioanda As MiControl = DirectCast(DirectCast(sender, Button).Parent, MiControl)



And that is a call from my click event from My Control file with this instrucction:

RaiseEvent EventoPublico_Click(sender, e)



Can some one please help me? How can I catch click event from MyControl file and I do something declarated on my Default page?

I let all of you my code built on ASPX.VB so you can have a better idea what I mean.

Here is a Screen Shot ---> ScreenShot

Wishing you all an excellent day, I reiterate my greeting and thank you in advance for your kind attention and help.

What I have tried:

Default.aspx


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<%@ Register Src="~/App_Controls/MiControl.ascx" TagPrefix="CJS" TagName="Figura" %>
<head runat="server">
    <title>Evento click con delegado</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="StyleSheet.css" type="text/css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server">
        <div runat="server">
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </div>
        <br />
        <div runat="server" class="Texto" style="clear:left">
            <asp:Label ID="lbResultado" runat="server" Text="Esperando un Click.."></asp:Label>
        </div>
    </form>
</body>



Default.aspx.vb


Partial Class _Default
    Inherits System.Web.UI.Page
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles form1.Load
        For i As Integer = 1 To 3
            Dim laFigura As MiControl = LoadControl("~/App_Controls/MiControl.ascx")
            AddHandler laFigura.EventoPublico_Click, AddressOf LaFigura_Click
            PlaceHolder1.Controls.Add(laFigura)
            laFigura.SuNombre = "Cuadrito 0" & i
        Next
    End Sub

    Protected Sub LaFigura_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim laFiguraSeleccioanda As MiControl = DirectCast(DirectCast(sender, Button).Parent, MiControl)
        lbResultado.Text = "Hiciste click en el " & laFiguraSeleccioanda.SuNombre
    End Sub
End Class



MiControl.ascx

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="MiControl.ascx.vb" Inherits="MiControl" %>
<link href="../StyleSheet.css" type="text/css" rel="stylesheet" />
<asp:Panel ID="Cuadrito" CssClass="Cuadrito Centro" runat="server">
    <div runat="server">
        <asp:Label ID="lbCuadrito" CssClass="Texto" Text="Control" runat="server" ></asp:Label>
    </div>
    <div runat="server">
        <asp:Button ID="btnCuadrito" runat="server" Text="Haz click" />
    </div>    
</asp:Panel>



MiControl.ascx.vb

Partial Class MiControl
    Inherits System.Web.UI.UserControl

    Public Delegate Sub Delegado_EventoClick(ByVal sender As Object, ByVal e As System.EventArgs)
    Public Event EventoPublico_Click As Delegado_EventoClick
    Public Property SuNombre As String
        Get
            Return lbCuadrito.Text
        End Get
        Set(value As String)
            lbCuadrito.Text = value
        End Set
    End Property
    Private Sub btnCuadrito_Click(sender As Object, e As EventArgs) Handles btnCuadrito.Click
        RaiseEvent EventoPublico_Click(sender, e)
    End Sub

End Class




Error Message:

System.InvalidCastException occurred
  HResult=0x80004002
  Message=No se puede convertir un objeto de tipo 'System.Web.UI.HtmlControls.HtmlGenericControl' al tipo 'MiControl'.
  Source=App_Web_tumekcyd
  StackTrace:
   at _Default.LaFigura_Click(Object sender, EventArgs e) in D:\Mis documentos\Ejemplo 03 - Evento Click con delegado\Default.aspx.vb:line 14
   at MiControl.btnCuadrito_Click(Object sender, EventArgs e) in D:\Mis documentos\Ejemplo 03 - Evento Click con delegado\App_Controls\MiControl.ascx.vb:line 16

解决方案

The button's parent is the <div>, not the user control.

You could either use the button's NamingContainer:

Dim laFiguraSeleccioanda As MiControl = DirectCast(DirectCast(sender, Control).NamingContainer, MiControl)


Or, you could modify the code which raises the event so that it passes the correct sender:

Private Sub btnCuadrito_Click(sender As Object, e As EventArgs) Handles btnCuadrito.Click
    RaiseEvent EventoPublico_Click(Me, e)
End Sub


which would simplify the handler:

Dim laFiguraSeleccioanda As MiControl = DirectCast(sender, MiControl)


这篇关于如何从控件对象获取单击事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆