- PR -

親画面でのイベント取得方法について

1
投稿者投稿内容
FLA
会議室デビュー日: 2002/11/08
投稿数: 7
投稿日時: 2002-12-07 14:34
自分で作成したWebユーザーコントロール(.ascx)のイベントを親画面で取得する方法はあるのでしょうか?

例)
・TEXTBOXとBUTTONを配置したWebユーザーコントロールを作成(.ascx)
・Webフォームにはラベルと上記で作成したWebユーザーコントロールを配置。(.aspx)

操作
1.WebユーザーコントロールのTEXTBOXに文字を入力
2.WebユーザーコントロールのBUTTONを押下
3.WebフォームでBUTTONのイベントを取得して、TEXTBOXの文字列をラベルに設定する。

Webユーザーコントロール側のボタンが押下された際に、Webユーザーコントロールを含んでいる親画面で、ラベルに文字列を設定するという処理を行いたいのですが、「Webユーザーコントロール」では、実現できないのでしょうか?

「Webカスタムコントロール」を作成する必要があるのでしょうか?

お分かりになる方がいましたらお願い致します。

[ メッセージ編集済み 編集者: FLA 編集日時 2002-12-07 14:36 ]

[ メッセージ編集済み 編集者: FLA 編集日時 2002-12-07 17:14 ]
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2002-12-09 12:03
こんな感じのコードでユーザコントロールでもイベントを
拾えます。 

// ユーザコントロールに追加するコード
public event EventHandler OnClick

// ユーザコントロール内のボタンのクリックイベント
private void Button1_OnClick(object sender,EventArgs e)
{
if(OnClick!=null)
OnClick(sender,e);
}
--------------------------------------------------------------------
ユーザコントロールを使用するPage
// コードビハインドを使う場合に、ユーザコントロール型で、IDを変数名にして定義
// プロテクトまたはパブリックでないと、ASPXファイル側では認識しない。
// UserControl型は、具体的なユーザコントロールの型名にする。
// UserControl1 というのは、 ユーザコントロールのIDを UserControl1と命名している
// と仮定

protected UserControl型 UserControl1;

protected override void OnInit(object sender,EventArgs e)
{
UserControl1.OnClick += new EventHandler(UserControl1_OnClick);
  base.OnInit(sender,e);
}

private void UserControl1_OnClick(object sender,EventArgs e)
{
// ココにUserControl1のボタンがクリックされたときの動作を記述
}



FLA
会議室デビュー日: 2002/11/08
投稿数: 7
投稿日時: 2002-12-10 15:16
返信遅くなり申し訳ありませんでした。
いのつちさん、返信ありがとうございます。

いのつちさんのコードを参考にしてみたのですが、
実はCを全く触ったことがなく、VB.NETに書き換える
事ができませんでした。

VBではどのようなコードになるのでしょうか・・・
度々申し訳ありません。
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2002-12-13 11:17
実は、NETになってからのVBを触っていないので、VB.NETについて
詳細がよくわかっていなかったりします。
こんな感じでしょうか。

ユーザコントロール
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="MyControl.ascx.vb" Inherits="testVB.MyControl" %>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>

ユーザコントロールのコードビハインド

Public MustInherit Class MyControl
Inherits System.Web.UI.UserControl
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Public Event OnClick As System.EventHandler
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
if OnClick is not nothing then
RaiseEvent OnClick(sender, e)
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^
end if

End Sub
End Class

Webページ

<%@ Register TagPrefix="uc1" TagName="MyControl" Src="MyControl.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="testVB.WebForm1"%>
<HTML>
<HEAD>
<title>WebForm1</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:Label id="Label1" runat="server"></asp:Label>
<uc1:MyControl id="MyControl1" runat="server"></uc1:MyControl>
</form>
</body>
</HTML>

Webページコードビハインド

Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents MyControl1 As MyControl
  '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Protected Sub UserControl1_OnClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyControl1.OnClick
' ^^^^^^^^^^^^^^^^^^^^^^^^^^
Label1.Text = "ユーザコントロールのボタンがクリックされました。"
End Sub
End Class
FLA
会議室デビュー日: 2002/11/08
投稿数: 7
投稿日時: 2002-12-14 04:41
いのつちさん、ありがとうございます。

If OnClick Is Not Nothing Then
  RaiseEvent OnClick(sender, e)
End If

OnClickに下線が出て、エラーとなっていましたが、よく分からなかったので
IF文をコメントアウトして動作させたところ、望みどおりの結果を得ることが出来ました。

1

スキルアップ/キャリアアップ(JOB@IT)