Cuijos Ответов: 1

Как я могу получить событие щелчка от объекта управления


Всем привет, Как поживаете?
Хорошего вам дня.

Я пытаюсь закодировать веб-решение для динамического добавления некоторых WebUserControls и cacht их Click Event. Я читал некоторые форумы, подобные этому, и я узнал, что для этого было необходимо делегировать мое событие щелчка из моего контроля и перепроектировать через Добавитьобработчик и Оператор addressof инструкции для моего файла "Default.aspx".

Ну, до этого шага все идет нормально. Но когда я нажимаю любую кнопку с моего пульта управления, я получаю систему.Сообщение об ошибке InvalidCastException (HResult=0x80004002), которое говорит, что невозможно преобразовать "System.Web.UI.HtmlControls.HtmlGenericControlobject" тип объекта для объекта "MyControl".

Он ссылается на специальную инструкцию о моем событии щелчка из моего файла "Default.aspx" .:

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


И это вызов из моего события click из моего контрольного файла с этой инструкцией:

RaiseEvent EventoPublico_Click(sender, e)


Может некоторые Один пожалуйста, помогите мне? Как я могу поймать событие щелчка из файла MyControl и сделать что-то объявленное на моей странице по умолчанию?

Я позволяю всем вам мой код, построенный на ASPX.VB, чтобы вы могли лучше понять, что я имею в виду.

Вот снимок экрана ---> скриншот

Желая всем вам отличного дня, я еще раз приветствую вас и заранее благодарю за ваше доброе внимание и помощь.

Что я уже пробовал:

Умолчанию.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>


Умолчанию.aspx-файл.ВБ


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 вносятся.ВБ
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



сообщение об ошибке:
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

1 Ответов

Рейтинг:
5

Richard Deeming

Родителем кнопки является <div>, а не пользовательский элемент управления.

Вы можете использовать либо кнопку NamingContainer:

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

Или вы можете изменить код, который вызывает событие, чтобы оно передавало правильный отправитель:
Private Sub btnCuadrito_Click(sender As Object, e As EventArgs) Handles btnCuadrito.Click
    RaiseEvent EventoPublico_Click(Me, e)
End Sub

что упростило бы работу обработчика:
Dim laFiguraSeleccioanda As MiControl = DirectCast(sender, MiControl)