- PR -

ASP.NET ユーザコントロールの表示位置を動的に変更させるには?

1
投稿者投稿内容
ベカムー
会議室デビュー日: 2003/07/14
投稿数: 4
投稿日時: 2003-07-14 17:01
ASP.NETでユーザコントロールを作成して複数ページで同じ
コントロールを遣い回そうとしているのですが、それぞれの
ページでそのコントロールを表示させる位置が違います。

呼び出し元のaspxページからascxコントロールページに
対して、どの位置に表示させるかを引数として渡せれば
良いのですが、いろいろ試したり調べてもわかりませんでした。

どなたか分かる方がいらっしゃればご助力いただきたく。
ベカムー
会議室デビュー日: 2003/07/14
投稿数: 4
投稿日時: 2003-07-14 17:16

動作実験しているソースを付けます。
Webユーザコントロールの 「Height="21px" Width="66px"」
の部分を動的に変更しようとしています。


(1)呼び出し元のWebページ側ソース (frmUserControl1.aspx)

<%@ Register TagPrefix="KasutamuControlTest" TagName="myControl" Src="WebKasutamuCtrl.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="frmUserControl1.aspx.vb" Inherits="AspTest.frmUserControl1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>frmUserControl1</title>
<meta content="Microsoft Visual Studio .NET 7.0" name="GENERATOR">
<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="MS UI Gothic">
<KASUTAMUCONTROLTEST:myControl id="myControl1" runat="server" NAME="myControl1"></KASUTAMUCONTROLTEST:myControl>
</FONT>
</form>
</body>
</HTML>


(2)Webユーザコントロール側ソース (WebKasutamuCtrl.ascx)

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="WebKasutamuCtrl.ascx.vb" Inherits="AspTest.WebKasutamuCtrl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<FONT face="MS UI Gothic">
<asp:TextBox id="TextBox1" Height="21px" Width="66px" style="Z-INDEX: 100; LEFT: 186px; POSITION: absolute; TOP: 230px" runat="server">99999999</asp:TextBox>
<asp:Label id="Label1" style="Z-INDEX: 105; LEFT: 255px; POSITION: absolute; TOP: 232px" runat="server" Width="9px" Height="21px">-</asp:Label>
</FONT>
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-14 18:15
こんにちは。

 ただいまWebユーザコントロールで使い回しをしています。

 ユーザコントロール側にパブリックなプロパティをつけてみてください。
例:
Public Property MaxDate() As Date
Get
If iptMaxDate.Value.Length = 0 Then
Return Nothing
Else
Return StringToDate(iptMaxDate.Value)
End If
End Get
Set(ByVal Value As Date)
If Value = Nothing Then
iptMaxDate.Value = Date.Today.AddYears(1).ToString("yyyy/MM/dd")
Else
iptMaxDate.Value = Value.ToString("yyyy/MM/dd")
End If
End Set
End Property


すると、HTMLの方に、こんな指定ができます。
<uc1:DateSetting id="DateSetting1" MaxDate="2005/09/30" runat="server"></uc1:DateSetting>

こんな風に指定して、Page_LoadやPage_Initで変更したらどうでしょうか?
ベカムー
会議室デビュー日: 2003/07/14
投稿数: 4
投稿日時: 2003-07-14 20:10
早速の返答ありがとうございます。>Jittaさん

こちらでTextBoxに対して教えて頂いた方法を適用してみると
HeightやWidthについては動的に変更できることがわかりました。

しかし、CSSのstyle属性の変更については
「プロパティ'Style'は'ReadOnly'です。」
と、表示されて設定できないようです。
(変更されては困るからこそReadOnlyとなっているんでしょうけど)

ここが行き止まりと思ってよいのでしょうか?


以下にWebKasutamuCtrl.ascx.vbのソース抜粋

Public Property userHeight() As System.Web.UI.WebControls.Unit
Get
Return System.Web.UI.WebControls.Unit.Parse("50px")
End Get

'呼び出し元ページで設定された値を適用する
Set(ByVal Value As System.Web.UI.WebControls.Unit)
TextBox1.Height = Value
End Set
End Property

Public Property userStyle() As System.Web.UI.WebControls.Unit
Get
Return System.Web.UI.WebControls.Unit.Parse("50px")
End Get

'呼び出し元ページで設定された値を適用する
Set(ByVal Value As System.Web.UI.WebControls.Unit)
'ここが「プロパティ'Style'は'ReadOnly'です。」となる
TextBox1.Style = Value
End Set
End Property

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-14 20:25
引用:

ベカムーさんの書き込み (2003-07-14 20:10) より:

しかし、CSSのstyle属性の変更については
「プロパティ'Style'は'ReadOnly'です。」
と、表示されて設定できないようです。
(変更されては困るからこそReadOnlyとなっているんでしょうけど)

ここが行き止まりと思ってよいのでしょうか?


 ちゃんとヘルプを読んでくださいねぇ〜!

 StyleプロパティはStyleCollectionです。スタイルの属性1つ1つについて、
設定変更を通知する必要があると思います。この辺、さわっていないので、不安。
おそらく、そのStyleで、
Style.Item("Width") = ??
Style.Item("Height") = ??
とできると思います。
ベカムー
会議室デビュー日: 2003/07/14
投稿数: 4
投稿日時: 2003-07-14 23:10
ありがとうございました。解決です。
Style.Item指定でうまくいきました。


Dim intSkipBox1 As Integer = 0
Dim intSkiplbl1 As Integer = 72
Dim intSkipBox2 As Integer = 87
Dim intSkiplbl2 As Integer = 121
Dim intSkipBox3 As Integer = 134
Public Property userStyleLeft() As Integer
Get
Return "0px"
End Get
'呼び出し元ページで設定された値を適用する
Set(ByVal Value As Integer)
TextBox1.Style.Item("LEFT") = (Value + intSkipBox1).ToString() + "px"
TextBox2.Style.Item("LEFT") = (Value + intSkipBox2).ToString() + "px"
TextBox3.Style.Item("LEFT") = (Value + intSkipBox3).ToString() + "px"
Label1.Style.Item("LEFT") = (Value + intSkiplbl1).ToString() + "px"
Label2.Style.Item("LEFT") = (Value + intSkiplbl2).ToString() + "px"
End Set
End Property

1

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