- PR -

ユーザコントロール内のフォーカス設定(ASP.NET)

投稿者投稿内容
馬車馬
会議室デビュー日: 2004/12/07
投稿数: 13
投稿日時: 2005-03-16 18:47
いつもお世話になっております。

現在、Webフォーム内のボタンによって画面の一部(ユーザコントロール)を
切り替えるという画面を作成しています。

ユーザコントロールの中には複数のテキストボックスやボタンがあり、
ユーザコントロール内で押下されたボタンによって
フォーカスを設定するテキストボックスを変えるという処理を行いたいと言う要望が出ました。
(ボタンAが押下された場合にはテキストボックス1
 ボタンBが押下された場合にはテキストボックス2 にフォーカスをあてる等)

クライアントスクリプトを埋め込んで上記処理を行おうとしたところ、
どうしてもフォーカスが押下されたボタンに行ってしまいます。

ユーザコントロールを使用せずにWebフォームのみでテストした場合には
要望どおりの処理が行えました。
ユーザコントロールを使用した場合とそうでない場合で
何か余分にやらなければならない処理等あるのでしょうか?

ご存知の方いらっしゃいましたらぜひお教えください。
以上よろしくお願い致します。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-03-17 06:59
引用:

クライアントスクリプトを埋め込んで上記処理を行おうとしたところ、
どうしてもフォーカスが押下されたボタンに行ってしまいます。



下記コードを参照してください。

コード:
Sub Button1_Click(sender As Object, e As EventArgs)
  Dim strScript As String
  Dim txt As TextBox = UserControl1.FindControl("TextBox1")

  strScript = "<script>"
  strScript = strScript & "document.forms[0]." & txt.ClientID & ".focus();"
  strScript = strScript & "</" & "script>"
  Page.RegisterStartupScript("ClientScript1", strScript)
End Sub

Sub Button2_Click(sender As Object, e As EventArgs)
  Dim strScript As String
  Dim txt As TextBox = UserControl2.FindControl("TextBox2")

  strScript = "<script>"
  strScript = strScript & "document.forms[0]." & txt.ClientID & ".focus();"
  strScript = strScript & "</" & "script>"
  Page.RegisterStartupScript("ClientScript2", strScript)
End Sub



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
馬車馬
会議室デビュー日: 2004/12/07
投稿数: 13
投稿日時: 2005-03-17 13:38
返答ありがとうございます。
お教え頂いたコードを参考にスクリプトを埋め込んで実行したところ

クライアントスクリプトでは正常にfocus()メソッドまで実行できているのを確認しましたが
にも関わらずフォーカスはやはりボタンになってしまいました。

作成しようとしている画面はコントロールの数が多かったり
ユーザコントロールとカスタムコントロールが混在していたりする
複雑な画面なので何がいけないのか原因の特定がまだ出来ていない状況です。

現在はとりあえずもっと簡単なサンプルを作成してみて
どの要素がいけなくてWebフォームのみの場合と異なる挙動となるのかを検証しています。
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 2005-03-18 15:06
こんにちは。
こんなんじゃだめですかね?
今私もASP.netで開発していて、
そこで使用しているMethodです。
うまくいくかはちょっとわからないですが。。。

それからちょっと気になっているのが、
テキストボックスやボタンがたくさんある点です。
その場合にはJavaScript的(?HTML的?)に別のFormになっていたりしませんか?

--------------------------------------------
public static void ClientComponentFocus(System.Web.UI.Page page, System.Web.UI.WebControls.WebControl ctrl ){
  page.RegisterStartupScript( "client" , "<script language='javascript'>Form1." + ctrl.ClientID + ".focus();</script>" );
}
--------------------------------------------
馬車馬
会議室デビュー日: 2004/12/07
投稿数: 13
投稿日時: 2005-03-23 14:04
回答ありがとうございます。

現在大幅に仕様変更が入っており、教えていただいたソースはまだテストできていません。
来月落ち着いたら試させて頂きます。
結果はわかり次第ご報告します。

>それからちょっと気になっているのが、
>テキストボックスやボタンがたくさんある点です。
>その場合にはJavaScript的(?HTML的?)に別のFormになっていたりしませんか?
>
この点については1Formになっています。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-03-23 14:09
提示してもらったコードを馬車馬さんのプログラムに埋め込む前に、提示してもらったコード自身を評価する最低限のhtmlファイルを作ってみてはいかが?
技術的に検証してから組み込まないと、原因の切り分けができません。

_________________
たつごろー
codeseek
こみゅぷらす
馬車馬
会議室デビュー日: 2004/12/07
投稿数: 13
投稿日時: 2005-03-29 14:55
いつもお世話になっております。

みなさま回答ありがとうございます。
みなさまにお教えいただいたコードや、自身で使用していたコードなどを使用して
サンプルをたくさん作ってみたところ大体以下のようになりました。

・サンプル上はきちんとフォーカスが設定される
 (フォームのみ、フォーム+ユーザコントロール、
  フォーム+ユーザコントロール+カスタムコントロール何れでもOK)
・本番用のソース上ではボタンにフォーカスが設定されてしまう

ということでスクリプトやコントロールのコードが間違っているわけでは
なさそうだと考えました。

実は今回は他チームが作成したフレームワーク画面(フォーム)に
各チームが作成したコンテンツ画面(ユーザコントロール)を載せるという
仕様なのですが、作成したコンテンツを単純なフォームに載せて動かした場合に
正常にフォーカスが設定されました。

よってフレームワーク画面の何らかの処理に問題がありそうだということで
フレームワークチームへ問題を提示し、そちらで調査を行うことになりました。

きちんとした回答はまだ受領してませんが、当チームとしては調査一時終了です。
みなさまありがとうございました。

回答が来次第レスを書き込みます。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-03-29 15:00
引用:

実は今回は他チームが作成したフレームワーク画面(フォーム)に
各チームが作成したコンテンツ画面(ユーザコントロール)を載せるという
仕様なのですが、作成したコンテンツを単純なフォームに載せて動かした場合に
正常にフォーカスが設定されました。


この作り方、不可能ではないし効果的なことがあるのも認めるけど、トラブルに陥ると解決しにくいので、私はお勧めできないです。
もしも馬車馬さんが、次に設計する機会があったら、他の方法での実装も考えてみてください。


_________________
たつごろー
codeseek
こみゅぷらす

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