- - PR -
ASP.NET ユーザコントロールの表示位置を動的に変更させるには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-07-14 17:01
ASP.NETでユーザコントロールを作成して複数ページで同じ
コントロールを遣い回そうとしているのですが、それぞれの ページでそのコントロールを表示させる位置が違います。 呼び出し元のaspxページからascxコントロールページに 対して、どの位置に表示させるかを引数として渡せれば 良いのですが、いろいろ試したり調べてもわかりませんでした。 どなたか分かる方がいらっしゃればご助力いただきたく。 | ||||
|
投稿日時: 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> | ||||
|
投稿日時: 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 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 | ||||
|
投稿日時: 2003-07-14 20:25
ちゃんとヘルプを読んでくださいねぇ〜! StyleプロパティはStyleCollectionです。スタイルの属性1つ1つについて、 設定変更を通知する必要があると思います。この辺、さわっていないので、不安。 おそらく、そのStyleで、 Style.Item("Width") = ?? Style.Item("Height") = ?? とできると思います。 | ||||
|
投稿日時: 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