- PR -

WebControlからStyle文字列を作成する方法

投稿者投稿内容
なかむら
ベテラン
会議室デビュー日: 2001/10/22
投稿数: 67
投稿日時: 2003-12-04 18:52
VS.NET2003(VB.NET)でWEBカスタムコントロールを開発しています。

全てのコントロールは WebControlクラスを継承して作成していますが、
このクラスが持っている BackColor や BorderWidth といったプロパティの値から
HTMLのStyle文字列を自動生成することはできないのでしょうか?

大抵のWEBサーバコントロールはこれらの値がHTMLのStyle属性に付加されている
と思うので、自動生成するような仕組みがあっても不自然ではないと思いますが、
どなたかご存知の方いらっしゃいませんでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-05 10:02
HtmlTextWriterあたりかな?

HtmlTextWriter.AddStyleAttribute メソッド
WebControl.AddAttributesToRender メソッド

など。

どれもRenderメソッドで自動的に吐いてくれるように登録するもので、Style属性の文字列が得られるものではありませんが。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-05 12:28
なかむらさん、こんにちは。

引用:

このクラスが持っている BackColor や BorderWidth といったプロパティの値から
HTMLのStyle文字列を自動生成することはできないのでしょうか?



System.ComponentModel.TypeConverter を継承するクラスが使えると思います。

例えば BorderWidth なんかの System.Web.UI.WebControls.Unit 型については、System.Web.UI.WebControls.UnitConverter の ConvertToString メソッド、System.Drawing.Color の値については System.Web.UI.WebControls.WebColorConverter の ConvertToString メソッドを試してみて下さい。



[ メッセージ編集済み 編集者: きくちゃん 編集日時 2003-12-05 12:29 ]
なかむら
ベテラン
会議室デビュー日: 2001/10/22
投稿数: 67
投稿日時: 2003-12-05 13:10
Jittaさん、きくちゃんさん、こんにちは。
レスありがとうございます。

HtmlTextWriter.AddStyleAttribute() を試してみました。
今までは Render時にゴリゴリとHTMLを手書きしていたのですが、以下のように
変えてみました。

すると、どうもAddStyleAttribte()だけうまく機能せず、Style属性が付加できません。
何が悪いのでしょうか…。

これがうまくいけば、UnitConverterなども試せるのですが…。

コード:
    ' <DIV>
    output.WriteBeginTag("DIV")
    output.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%")
    output.Write(HtmlTextWriter.TagRightChar)
    output.WriteLine()

    ' <IMG>
    output.WriteBeginTag("IMG")
    output.WriteAttribute("src", [ImgPath] & "sp.gif")
    output.WriteAttribute("border", "0")
    output.WriteAttribute("width", "1")
    output.WriteAttribute("height", "16")
    output.AddStyleAttribute("vertical-align", "middle")
    output.Write(HtmlTextWriter.TagRightChar)
    output.WriteEndTag("IMG")
    output.WriteLine()

    ' <IMG>
    output.WriteBeginTag("IMG")
    output.WriteAttribute("src", [ImgPath] & "list_yellow.gif")
    output.WriteAttribute("border", "0")
    output.AddStyleAttribute("vertical-align", "middle")
    output.Write(HtmlTextWriter.TagRightChar)
    output.WriteEndTag("IMG")
    output.WriteLine()

    ' <SPAN>
    output.WriteBeginTag("SPAN")
    output.AddStyleAttribute("vertical-align", "middle")
    output.Write(HtmlTextWriter.TagRightChar)
    output.Write([Title])
    output.WriteEndTag("SPAN")
    output.WriteLine()

    ' </DIV>
    output.WriteEndTag("DIV")
    output.WriteLine()

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-05 13:26
なかむらさん、こんにちは。

引用:

今までは Render時にゴリゴリとHTMLを手書きしていたのですが、以下のように


もしかして、System.Web.UI.HtmlControls.HtmlGenericControl とか使えませんか?
なかむら
ベテラン
会議室デビュー日: 2001/10/22
投稿数: 67
投稿日時: 2003-12-05 13:48
引用:

もしかして、System.Web.UI.HtmlControls.HtmlGenericControl とか使えませんか?



使ったことはないですが、これをどのように使うのでしょうか?
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-05 14:16
なかむらさん、こんにちは。

引用:

使ったことはないですが、これをどのように使うのでしょうか?


使い方とか、詳細についてはヘルプにあると思いますよ。

が、取り敢えず、一例を。
コード:
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
    Dim Div As HtmlGenericControl = New HtmlGenericControl("DIV")
    Dim Uc As UnitConverter = New UnitConverter

    Div.Style.Add("WIDTH", Uc.ConvertToString(Unit.Percentage(100)))
    Div.RenderControl(writer)
End Sub


なかむら
ベテラン
会議室デビュー日: 2001/10/22
投稿数: 67
投稿日時: 2003-12-05 15:11
引用:

コード:
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
    Dim Div As HtmlGenericControl = New HtmlGenericControl("DIV")
    Dim Uc As UnitConverter = New UnitConverter

    Div.Style.Add("WIDTH", Uc.ConvertToString(Unit.Percentage(100)))
    Div.RenderControl(writer)
End Sub





RenderControlメソッドがあるんですね。見逃していました…。
ありがとうございます。
Styleもきちんと出力されるようになりました。

しかし、基本的なところでまた問題が…。
Style設定時に BackColorはデザイナで設定した値が取得できるのですが、BorderWidthや
BorderColorといったプロパティなどが Empty になっているのです…。

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