- PR -

カーソル移動を汎用サブルーチンにしたい。

1
投稿者投稿内容
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-05-09 11:32
いつもお世話になっております。

現在、Webフォームを開発しているASP.NETの初心者です。
この会議室を参考にさせてもらい、RegisterStartupScriptを使用して、
Webフォームでのカーソル移動が出来るようになったのですが、
複数のフォームでカーソル移動するため、汎用のサプルーチンにしようと、

 Public Class MapAccess
Inherits System.Web.UI.Page
'***********************************************************
' カーソル移動処理
'***********************************************************
Public Sub FocusSet(ByVal ww As String)
Dim scrpt As String

scrpt = "<script language='JavaScript'>" + "document.getElementById('"
scrpt += ww + "').focus(); <" + "/script>"
RegisterStartupScript("setfocus", scrpt)
End Sub
End Class

というクラスを追加し、各Webフォームから

FocusSet(txtSyain_CD.ClientID)

 のようにしたのですが、

”名前FocusSetは宣言されていません”というエラーが出たので、

 上記サブルーチンにSharedを追加し、

Public Sub FocusSet(ByVal ww As String)

Public Shared Sub FocusSet(ByVal ww As String)

 としたのですが、今度はRegisterStartupScriptのところに

 ”クラスの明示的なインスタンスを指定しないで、共有メソッドまたは
  共有メンバ初期化子内からクラスのインスタンス メンバへ参照することは
  できません。”

 というエラーが追加され、コンパイルを通りません。

 それならばと思い、RegisterStartupScriptらの前に"System.Web.UI.Page."を
 つけてみたのですが、今度は

 ”非共有メンバを参照するには、オブジェクト参照が必要です。”

 というエラーがでます。

 どなたか、解決方法か参考になる記事があったら教えていただけないでしょうか?

 各Webフォームに

'***********************************************************
' カーソル移動処理
'***********************************************************
Private Sub FocusSet(ByVal ww As String)
Dim scrpt As String

scrpt = "<script language='JavaScript'>" + "document.getElementById('"
scrpt += ww + "').focus(); <" + "/script>"
RegisterStartupScript("setfocus", scrpt)
End Sub

を追加し、Webフォーム内で
 
  FocusSet(txtSyain_CD.ClientID)

 のようにするとOKだったのですが・・・。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-05-09 11:57
FocusSet()メソッドを呼ぶWebフォームはMapAccessクラスを継承しているのではないのですか?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-09 11:58
内容は検証していないので元のままですが、
コード:
Public Class MapAccess
 '***********************************************************
 ' カーソル移動処理
 '***********************************************************
 Public Shared Sub FocusSet(Byval target As System.Web.UI.Page, ByVal ww As String)
  Dim scrpt As String

  scrpt = "<script language='JavaScript'>" + "document.getElementById('"
  scrpt += ww + "').focus(); <" + "/script>"
  target.RegisterStartupScript("setfocus", scrpt)
 End Sub
End Class


でどうでしょうか。
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-05-09 14:28
burton999さん、にしざきさん、ありがとうございました。
御指摘どおり、サブルーチンの引数に、
 Byval target As System.Web.UI.Page
を追加し、RegisterStartupScript文を
 target.RegisterStartupScript("setfocus", scrpt)
に変更し、Webフォームで、
 MapAccess.FocusSet(Me, txtSyain_CD.ClientID)
としたら、コンパイルOKで、予想通りの結果が得られました。

どうもありがとうございました。
1

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