1

さて、これを2日間いじった後、私はついにイベントをまったく理解していないという結論に達しました。

これが私がやろうとしていることであり、その後に私のコードが続きます:

ユーザーコントロールにボタンがあり、クリックすると、.aspxページのラベルを更新したいと思います。そこで、ユーザーコントロールでイベントハンドラーを作成し、ページでそれをリッスンしようとしています。しかし、それはまったく機能しておらず、誰かが私を啓発してくれることを望んでいました。

ユーザーコントロール:

Public Custom Event handleButtonEvent As EventHandler

    AddHandler(ByVal value As EventHandler)
        AddHandler btnEventCall.Click, AddressOf Me.doStuff
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler btnEventCall.Click, AddressOf Me.doStuff
    End RemoveHandler

    RaiseEvent (ByVal sender As Object, ByVal e As System.EventArgs)
    End RaiseEvent

End Event

Protected Sub btnEventCall_Click(sender As Object, e As EventArgs) Handles btnEventCall.Click

End Sub

Protected Sub doStuff()
    Response.Write("do stuff")   'dont really need this
End Sub

.aspxページ:

Protected Sub control_event(ByVal sender As Object, ByVal e As EventArgs) Handles test1a.handleButtonEvent
updateLabel()
End Sub


private sub updateLabel()
    lblUpdate.Text="works!"
end sub

ありがとう!

4

2 に答える 2

1

私は実際にこれをユーザーコントロールに実装したばかりなので、おそらくこれが役立つでしょう。ユーザーコントロールでは、最初に次のようにイベントを登録する必要があります。

Public Event DataChange As EventHandler

あなたはこのようにそのイベントを発砲することができます:

RaiseEvent DataChange(Me, New EventArgs)

このイベントは、ユーザーコントロールのボタンクリックで発生します。イベントには、渡す2つのパラメーターがあります。送信者オブジェクト(この場合はそれ自体)とイベント引数。この例では、eventArgsは何でもありませんが、独自に作成して値を追加することができます。

次に、aspxページで、イベントを添付する必要があります。アプリケーションをビルドすると、OnDataChangeというイベントがあることがわかります。これは、次のように、クライアント側のいずれかでアクセスできます。

<mc:myControlrunat="server" ID="myControl1" OnDataChange="myControl_dataChange"  /> 

あなたの後ろのコードでそれを添付することができます。いずれにせよ、次のようなイベントが必要になります。

 Protected Sub relatedOrders_dataChange(ByVal sender As Object, ByVal e As EventArgs)
   'do something
 end sub

また

 Protected Sub myControl_dataChange(ByVal sender As Object, ByVal e As EventArgs) handles myControl1.DataChange
   'do something
 end sub

サーバー側とクライアント側の両方でイベントを添付しないでください。添付すると、イベントが2回発生します。

それはそれをする必要があります。完全なポストバックなしで機能させたい場合は、いくつかの更新パネルを追加する必要があるかもしれませんが、それ以外の場合は、行ってもよいはずです。概要:

ユーザーコントロール:

Partial Class myControl
    Inherits System.Web.UI.UserControl
    Public Event DataChange As EventHandler

    'your button click event
    Protected Sub bnt_click(ByVal sender As Object, ByVal e As EventArgs)
      'do stuff
      'now raise the event
       RaiseEvent DataChange(Me, New EventArgs)
    end sub
end class

メインページ:

<mc:myControlrunat="server" ID="myControl1" OnDataChange="myControl_dataChange"  /> 

Partial Class MyPainPage
    Protected Sub myControl_dataChange(ByVal sender As Object, ByVal e As EventArgs)
 'do stuff 
end sub

end Class
于 2013-02-26T19:17:11.203 に答える
1

開始するにはEvents、以下のこの基本的な例を参照してください。ユーザーコントロールでこれを行うことについては、このリンクを参照してください

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Sub GreetingBtn_Click(ByVal sender As Object, ByVal e As EventArgs)

    GreetingLabel.Text = "Works!"

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Button Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <h3>Simple Button Example</h3>

      <asp:Button id="GreetingBtn"
           Text="Click here for greeting..."
           OnClick="GreetingBtn_Click" 
           runat="server"/>
      <br />
      <br />
      <asp:Label ID="GreetingLabel" runat="server" 
                 Visible="true" Text="Hello World!" />
    </div>
    </form>
</body>
</html>

コードビハインドを使用する場合は、<script>タグを含むタグ間のすべてを削除し、これをコードビハインドに配置します。

Protected Sub GreetingBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles GreetingBtn.Click

    GreetingLabel.Text = "Works!"

End Sub
于 2013-02-26T18:38:43.513 に答える