none
イベントハンドラについて RRS feed

  • 質問

  • イベントハンドラについて

    Visual Web Developer環境にて
    DatailViewのテンプレート編集の、ItemTemplateを利用して、Buttomを設定しました。
    ソース上で、Buttomに対するのイベントハンラーを定義したいのですが、既存のイベントハンドラのHandles句に、「コンロールイベント」の中に、DatailViewのButtomの定義が、表示されません。

    DatailViewの中に定義したButtomのイベントハンドラの定義方法を教えてください。
    よろしくお願いします。

    環境は以下の通りです。

    システム : Wicrosoft Windows 2000 Service Pack4
    DB : SQL Server 2005

    Microsoft Visual Web Developer 2005 Express Edition
    NET.Framework 2.0
    開発言語 VB
    ASP.NET 2.0
    2009年3月25日 9:47

回答

  •  こんにちは!(^^)!ふ~です。

    テキストボックスで、Enterキーを押下したとき、近くのボタンにフォーカスが移動して動作してしまいます。
    そのような場合、私は、隅に見えないように何も処理を行わない「ダミーボタン」を追加して対処しております。
    テキストボックスで、Enterキーを押下したとき、この「ダミーボタン」にフォーカスが移動して動作するように
    タブオーダーを調整します。(このことで何も行われないようになります)

    別の方法として、テキストボックスで、Enterキーを押下したことを検出する方法も考えられます。
    <少々大変なアイディアー >
    protected void Page_Load(object sender, EventArgs e)  
    {  
         TextBox1.Attributes.Add("onkeydown", "if (event.keyCode == 13) Page_ClientValidate();");  
    }  
    ご参照資料
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/aecb6855-9faf-4955-b7bd-78b96d1ccf75

    ご参考になれば幸いです。
    • 回答としてマーク tanuyoshi 2009年3月27日 2:48
    2009年3月26日 9:16

すべての返信

  •  こんばんは!(^^)!ふ~です。
    >DatailViewの中に定義したButtomのイベントハンドラの定義方法を教えてください。
    OnClick="SubmitBtn_Click"  この事でしょうか?

    ///// Default.aspx /////  
    <asp:DetailsView ID="DetailsView1" runat="server" Height="50px"   
     Width="125px" AutoGenerateRows=False DataSourceID=SqlDataSource1>  
               <Fields> 
                <asp:BoundField DataField="年月日" HeaderText="年月日" SortExpression="年月日" /> 
                     <asp:BoundField DataField="メモ" HeaderText="メモ" SortExpression="メモ" /> 
                </Fields> 
                <HeaderTemplate> 
                     <asp:Button ID="Button1" runat="server"  OnClick="SubmitBtn_Click" Text="Button" /> 
                </HeaderTemplate> 
    </asp:DetailsView> 
     
    ///// Default.aspx.vb /////  
    Protected Sub SubmitBtn_Click(ByVal sender As Object, ByVal e As EventArgs)  
     Debug.WriteLine("Hello World!!")  
    End Sub  
     
    ///// Default.aspx.cs /////  
    protected void SubmitBtn_Click(Object sender, EventArgs e)  
    {  
     Debug.WriteLine("Hello World!!");  
    }  
     

    2009年3月25日 15:08
  • 回答有難うございます。

    >DatailViewの中に定義したButtomのイベントハンドラの定義方法を教えてください。
    OnClick="SubmitBtn_Click"  この事でしょうか?

    Handles の後のxxxxx.xxx指定ができないので、方法があるでしょうか?
    確認です。
    例)
    ///// Default.aspx.vb ///// 
    Protected Sub SubmitBtn_Click(ByVal sender As Object, ByVal e As EventArgs)  Handles xxxxx.xxx
     Debug.WriteLine("Hello World!!") 
    End Sub 

    よろしくお願いします。
    2009年3月26日 2:38
  •  こんにちは!(^^)!ふ~です。

    <body> 
        <form id="form1" runat="server">  
            <asp:DetailsView ID="DetailsView1" runat="server" DataSourceID=SqlDataSource1>  
                <FooterTemplate> 
                    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" /> 
                </FooterTemplate> 
                <Fields> 
                    <asp:BoundField DataField="年月日" HeaderText="年月日" SortExpression="年月日" /> 
                    <asp:BoundField DataField="メモ" HeaderText="メモ" SortExpression="メモ" /> 
                </Fields> 
            </asp:DetailsView> 
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ... 省略 ></asp:SqlDataSource> 
            <asp:Button ID="Button1" runat="server" Text="Button" /> 
        </form> 
    </body> 
     
    Partial Class _Default  
        Inherits System.Web.UI.Page  
     
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click  
            System.Diagnostics.Debug.WriteLine("Hello World!!")  
        End Sub  
     
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)  
            System.Diagnostics.Debug.WriteLine("Hello World!!")  
        End Sub  
    End Class  
     

    >Handles の後のxxxxx.xxx指定ができないので、方法があるでしょうか?

    それなりの説明を考えますと、<FooterTemplate>などの中で<asp:Button ID="Button2" ...>
    と宣言されたButton2は、<FooterTemplate>から抜ければ消滅してしまいます。
    Nullでは、Handles Button2.Clickと記述できません。
    <form>で<asp:Button ID="Button1"...>と宣言されたButton1は、<form>から抜けないので
    Handles Button1.Clickと記述しても消滅しないので問題有りません。
    「Handles」は設計が古くなってしまったようです。C#などでは使ってませんよ。

    ご参考資料 イベントを処理する
    http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet25/vb6tonet25_01.html
    2009年3月26日 6:06
  • 回答有難うございました。

    参考になりました。

    今回の問い合わせは、入力エリア設定セせずにenterキーを押された際、画面遷移パターンが発生したため、問い合わせしました。

    カーソルが画面遷移するボタンに遷移している可能性があるので、上記機能で対応できるのと考えてためですが、良い方法がわかりません。

    解決策があるようでしたら、教えてください。

    tabキーで、画面遷移ボタンまで、移動していないように見えます。

    事象
    入力エリアにデータを入力し、エラー発生、状態で、enterをたたくと、画面遷移しています。
    遷移ボタンを押していない状態。
    エラーが発生しても、無視して遷移ボタンを押されて時に、画面遷移できるようにして作成している。

    enterの判定を追加して対応したいのですが、良い方法を教えてください。

    よろしくお願いします。
    2009年3月26日 7:23
  •  こんにちは!(^^)!ふ~です。

    テキストボックスで、Enterキーを押下したとき、近くのボタンにフォーカスが移動して動作してしまいます。
    そのような場合、私は、隅に見えないように何も処理を行わない「ダミーボタン」を追加して対処しております。
    テキストボックスで、Enterキーを押下したとき、この「ダミーボタン」にフォーカスが移動して動作するように
    タブオーダーを調整します。(このことで何も行われないようになります)

    別の方法として、テキストボックスで、Enterキーを押下したことを検出する方法も考えられます。
    <少々大変なアイディアー >
    protected void Page_Load(object sender, EventArgs e)  
    {  
         TextBox1.Attributes.Add("onkeydown", "if (event.keyCode == 13) Page_ClientValidate();");  
    }  
    ご参照資料
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/aecb6855-9faf-4955-b7bd-78b96d1ccf75

    ご参考になれば幸いです。
    • 回答としてマーク tanuyoshi 2009年3月27日 2:48
    2009年3月26日 9:16
  • 早速の回答ありがとうございます。

    >テキストボックスで、Enterキーを押下したとき、近くのボタンにフォーカスが移動して動作してしまいます。
    そのような場合、私は、隅に見えないように何も処理を行わない「ダミーボタン」を追加して対処しております。
    テキストボックスで、Enterキーを押下したとき、この「ダミーボタン」にフォーカスが移動して動作するように
    タブオーダーを調整します。(このことで何も行われないようになります)

    指摘の通り、「ダミーボタン」を追加して、対応を考えてみます。


    テストして、問題解決しました。
    ありがとうございました。

    2009年3月27日 1:41