SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

改行やリンクをタグに自動置換するコントロール作成

簡単なWebカスタムコントロールの作成方法

はじめてのWebカスタムコントロールの作成

 前述のような場合に有用なのが「ユーザコントロール」です。では、改行をbrに変換する機能を持ったラベルを作ってみましょう。

 まず新しいプロジェクトを作成します。

C#の場合:[Visual C#]→[Windows]→[Webコントロールライブラリ]
C#の場合:[Visual C#]→[Windows]→[Webコントロールライブラリ]
VB.NETの場合:[Visual Basic]→[Windows]→[Webコントロールライブラリ]
VB.NETの場合:[Visual Basic]→[Windows]→[Webコントロールライブラリ]

 そうするとサンプルのコントロールのソースが表示されるので、これを変更する形で実装してみましょう。

サンプルのコントロールのソース(C#)
サンプルのコントロールのソース(C#)

 もともとのサンプルクラスは、WebControlというクラスを継承して直接新しいコントロールを作成しています。ただし、このようにWebControlを継承して、一からコントロールを作成する機会はそう多くありません。

 今回もLabelコントロールの動きを制御したいというだけですので、Labelを継承元にし、クラスの名前は「BRLabel」とします。

Labelを継承しただけのコントロール(C#)
namespace controlcs
{
    [ToolboxData("<{0}:BRLabelCS runat=server></{0}:BRLabelCS>")]
    public class BRLabelCS : Label
    {
    }
}
Labelを継承しただけのコントロール(VB.NET)
<ToolboxData("<{0}:BRLabelVB runat=server></{0}:BRLabelVB>")> _
Public Class BRLabelVB
    Inherits Label
End Class

 枠組みを作るには、これだけでOKです。ToolBoxData属性は、.aspxのファイルをドラッグ&ドロップ編集する際に表示される名称、属性のデフォルトになるので、必ず指定するようにします。

 ここで、実際に.aspxファイルにコントロールを貼り付けて、Labelと同じ動きをしているかを確認してみたいと思います。

 .aspxファイルを開いてツールボックスを確認すると、先ほど作成したBRLabelCS(C#の場合)とBRLabelVB(VB.NETの場合)が表示されていると思います。同じソリューションにプロジェクトを設定していれば、後はこれをドラッグ&ドロップするだけです。

ツールボックスでの表示
ツールボックスでの表示
デザインビューでの配置
デザインビューでの配置

 これで設定は完了です。データがすべてのコントロールに設定されるように変更して、実行してみましょう。

BRLabelへのテストコード(C#)
this.Label1.Text = DBからのデータ;
this.BRLabelCS1.Text = DBからのデータ;
this.BRLabelVB1.Text = DBからのデータ;
BRLabelへのテストコード(VB.NET)
Me.Label1.Text = DBからのデータ
Me.BRLabelCS1.Text = DBからのデータ
Me.BRLabelVB1.Text = DBからのデータ

 どちらのユーザーコントロールとも、Labelと同じ動きをしていることが確認できました。さて、それでは本題のBR変換を行います。

 WebControlでは、自分のもっている情報の出力をRenderContentsというメソッドで行います。今回はそれをオーバーライドして表現を変更します。以下のようなコードを追加します。

RenderContents での変換(C#)
protected override void RenderContents(HtmlTextWriter writer)
{
    writer.Write(this.Text.Replace("\r\n", "<br />"));
}
RenderContents での変換(VB.NET)
Protected Overrides Sub RenderContents( _
    ByVal writer As System.Web.UI.HtmlTextWriter)
    writer.Write(Me.Text.Replace(vbNewLine, "<br />"))
End Sub

 改行マークを置き換える部分は先ほどと同じです。HtmlTextWriterはファイルの出力で利用するStreamWriterなどと同じように、HTMLへの出力を行うライターです。そのライターに、文字を置き換えたものを出力しています。

 それでは実行してみましょう。

 このように無事改行されるようになりました。

手動でコントロールのDLLを関連付ける方法

 今回は、Visual StudioのIDEを利用して、コントロールをドラッグ&ドロップで設定しました。それでは手動で行うにはどうしたらよいのでしょうか?

 「bin」フォルダを作成し、コントロールを含むDLLを格納します。

「bin」フォルダ
「bin」フォルダ

 格納したDLLファイルをRegisterディレクティブとして、記述します。

@Registerのテストコード
<%@ Register Assembly="controlcs" Namespace="controlcs" TagPrefix="cc1" %>
<%@ Register Assembly="controlvb" Namespace="controlvb" TagPrefix="cc2" %>

 次に、ラベルの代わりに利用する箇所にコントロールを配置します。

BRLabelのテストコード
<cc1:BRLabelCS ID="BRLabelCS1" runat="server" />
<cc2:BRLabelVB ID="BRLabelVB1" runat="server" />

 これで完了です。

 今回ここで設定した内容は、以下の図のような関係になっています。

 アセンブリ名の指定と同時に行ったTagPrefixという指定を、BRLabelCSなどの利用時に使っています。標準のLabelコントロールなどは<asp:Label>などのプレフィックスを持っているので、これを暗黙のうちに行っていると考えてください。

次のページ
さらに一歩進んだLabelコントロール

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

中 博俊(ナカ ヒロトシ)

大阪でフリーのソフトウェアエンジニア兼テクニカルライターとして日々新技術で楽しんでいる。MSMVP for C# ブログ:http://blogs.wankuma.com/naka/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/402 2006/06/01 00:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー