トップ回答者
イベントハンドラについて

質問
-
イベントハンドラについて
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
回答
-
こんにちは!(^^)!ふ~です。
テキストボックスで、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
すべての返信
-
こんばんは!(^^)!ふ~です。
>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!!"); } -
回答有難うございます。
>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
よろしくお願いします。 -
こんにちは!(^^)!ふ~です。
<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 -
回答有難うございました。
参考になりました。
今回の問い合わせは、入力エリア設定セせずにenterキーを押された際、画面遷移パターンが発生したため、問い合わせしました。
カーソルが画面遷移するボタンに遷移している可能性があるので、上記機能で対応できるのと考えてためですが、良い方法がわかりません。
解決策があるようでしたら、教えてください。
tabキーで、画面遷移ボタンまで、移動していないように見えます。
事象
入力エリアにデータを入力し、エラー発生、状態で、enterをたたくと、画面遷移しています。
遷移ボタンを押していない状態。
エラーが発生しても、無視して遷移ボタンを押されて時に、画面遷移できるようにして作成している。
enterの判定を追加して対応したいのですが、良い方法を教えてください。
よろしくお願いします。
-
こんにちは!(^^)!ふ~です。
テキストボックスで、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
-