SHOEISHA iD

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

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

ComponentZine(ComponentOne)

カラフルなラベルとツールチップを持った.NETアプリケーションを作る

SuperToolTip for .NETコンポーネントでHTMLコンテンツをプログラムに使用する

  • X ポスト
  • このエントリーをはてなブックマークに追加

Windowsアプリケーションで文字情報を表示する際はラベルを使用しますが、文字の装飾に関してはフォントと文字色を変えるぐらいです。SuperToolTip for .NETコンポーネントを使うことで文字装飾やツールヒントの見た目にさまざまなバリエーションをつけることができるようになります。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 プログラムで文字情報を表示するのにラベルを使用しますが、文字の装飾はせいぜいフォントと文字色を変えるだけです。ツールヒントにいたっては、ほとんど純粋な文字列しか表示できません。

 これらラベルやツールヒントを、ワープロソフトやホームページのような文字装飾や変わったデザインのレイアウトができるようになったら、プログラムの外観もかなり自由度の高いデザインを作ることができると思い、何かいいコンポーネントがないか探していたところ、SuperToolTip for .NETコンポーネントを見つけました。

 このコンポーネントは、ラベルとツールヒントの文字表示にHTML言語を使うことができるという、かなり驚きのコンポーネントです。HTMLタグを使うことができるので、文字の装飾はもちろん段落やテーブル・画像の表示までラベルとツールヒントに組み込むことができます。

 そこで、このSuperToolTip for .NETコンポーネントを使用して、カラフルなラベルとツールチップを持った.NETアプリケーションを作ってみました。

文字単位での装飾やVista風のツールヒントを作成できる
文字単位での装飾やVista風のツールヒントを作成できる

対象読者

 Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある人。

必要な環境

 Visual Basic 2005またはVisual C# 2005、Visual Studio 2005でプログラムが作れる環境。

プログラム実行時の注意事項

 本稿の実行ファイル(バイナリファイル)を動かすには、zipファイルに同梱してある以下のファイルが必要になります。

  • C1.Win.C1SuperTooltip.2.dll…Tooltip コントロール(.NET Framework 2.0用)

 これらのファイルを、実行プログラムと同じフォルダに格納します。また、.NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。

コンポーネントのインストール

 はじめてSuperToolTip for .NETコンポーネントを使用する方は、プロジェクトにComponentOne Studio 2007 WinForms Editionをインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。製品ページ左側の[ダウンロード]-[トライアル版]をクリックし、ダウンロード方法([FTP]または[HTTP])を選択すれば入手できます。ファイルはLZH形式で圧縮されています。

 有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールの追加

 ComponentOne Studio 2007 WinForms Editionをインストールしたら、ツールボックスに専用のタブを作成し、SuperToolTip for .NETコンポーネントを追加します。追加するコンポーネントは、「.NET Frameworkコンポーネント」の「名前空間」が「C1.Win.C1SuperTooltip」で始まるコンポーネント「C1SuperLabel」と「C1SuperTooltip 」です。

「C1.Win.C1SuperTooltip」で始まる名前空間のコンポーネント「C1SuperLabel」と「C1SuperTooltip 」を追加する
「C1.Win.C1SuperTooltip」で始まる名前空間のコンポーネント「C1SuperLabel」と「C1SuperTooltip 」を追加する

GUIの作成

 GUIは、プロジェクトに2つのフォームを追加して作成します。

 Form1には、C1SuperLabelコンポーネントを1つ、C1SuperTooltipコンポーネントを2つ組み込みます。

Form1のGUIデザイン
Form1のGUIデザイン

 Form2には、C1SuperLabelコンポーネントとTextBox、Label、Buttonの各コントロールを配置します。

Form2のGUIデザイン
Form2のGUIデザイン

C1SuperLabelコンポーネントの文字列の設定

 C1SuperLabel・C1SuperTooltipコンポーネントは、表示する文字の初期設定を専用のエディタを使用して作成します。

C1SuperLabelのデザイン時の設定

 C1SuperLabelコンポーネントのタスクメニューから「ラベルの編集」を選ぶと、エディタが起動します。

 このエディタは、プレビュー機能を持ったエディタで、左側のペインにHTML文を入力すると、その結果が右側に表示されます。ここに、HTMLタグ付きの文字列を記述して、ラベルの表示内容を作成します。

「ラベルの編集」を選ぶ
「ラベルの編集」を選ぶ
HTMLタグ付きの文字列を記述していく
HTMLタグ付きの文字列を記述していく

 ここでは、以下のようなHTML文を作成してみました。こうすると、文字単位でフォントや文字色を変えることができたり、ラベルの中にテーブルを組み込みテーブルを装飾したりすることができ、Webページと同じようにラベルを編集することができます。

<p align="center">
  <strong>
    <font size="5">あらかじめ
      <font color="#ff0080">エディタ</font><font color="#800080">HTMLタグ</font>付きの<br>
      文字を作成する
    </font>
  </strong>
</p>
<table cellspacing="0" cellpadding="0" width="168" border="1" 
       style="width: 168px; height: 62px" align="center">
  <tr>
    <td bgcolor="#00ffff"> テーブルの</td>
  </tr>
  <tr>
    <td bgcolor="#ffff00"> 挿入も</td>
  </tr>
  <tr>
    <td bgcolor="#ff80c0"> 可能</td>
  </tr>
</table>
ヒント
 いちいちHTMLタグを記述するのは大変ですから、タグを自動生成してくれるHTMLエディタでラベルに表示するコンテンツを作成し、そのHTML文をこのエディタにコピー&ペーストすると、開発の手間をかなり省略することができます。

コードから文字列を設定する

 このプログラムでは、C1SuperLabelコンポーネントをクリックすると、表示しているコンテンツを入れ替えるようにしていますが、これはコンポーネントのTextプロパティにHTMLタグ付きの文字列を設定します。

 このとき、<img style="width: 140px; height: 150px" >とタグ内で""記号を使う場合、Visual Basicでは<img style=""width: 140px; height: 150px"" >」と「"」を2つ使い、「""""」のように記述します。

 C#では<img style='width: 140px; height: 150px' >と「'」を使用します。

Visual Basic
Public flag As Boolean = False
Private Sub C1SuperLabel1_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) _
                                   Handles C1SuperLabel1.Click
  '画像ファイルsample.jpgをexeファイルと同じフォルダにおいておくこと

  If flag = False Then
    Me.C1SuperLabel1.Text = _
     "<p><table style=""width: 350px; height: 200px""" & _
      "cellspacing=""0"" cellpadding=""0"" width=""350""" & _
      " border=""1"">" & _
     "<tr><td><img style=""width: 140px; height: 150px""" & _
      " height=""320""" & _
      "alt="""" src=""sample.jpg"" width=""240"" border=""0"" >" & _
      "</td>" & _
      "<td>フレームを使って編集することもできる </td></tr>" & _
      "</table></p>"
    flag = True
  Else
    Me.C1SuperLabel1.Text = _
     "<p align=""center""><strong><font size=""5"">あらかじめ" & _
     "<font color=""#ff0080"">エディタ</font>で" & _
     "<font color=""#800080"">HTMLタグ</font>付きの<br>" & _
     "文字を作成する<br><br><table cellspacing=""0""" & _
     "cellpadding=""0"" width=""168"" border=""1"" style=""width:" & _
     "168px; height: 62px"" align=""center""><tr>" & _
     "<td bgcolor=""#00ffff"">" & _
     "テーブルの</td></tr>" & _
     "<tr><td bgcolor=""#ffff00""> 挿入も</td>" & _
     "</tr><tr><td bgcolor=""#ff80c0""> 可能</td></tr></table>" & _
     "</font></strong></p>"
    flag = False
  End If
End Sub
C#
Boolean flag = false;
private void C1SuperLabel1_Click(object sender, EventArgs e)
{
  // 画像ファイルsample.jpgをexeファイルと同じフォルダにおいておくこと

  if( flag == false){
    C1SuperLabel1.Text
      = "<p><table style='width: 350px; height: 200px'"
      + "cellspacing='0' cellpadding='0' width='350' border='1'>" 
      + "<tr><td>"
      + "<img style='width: 140px; height: 150px' height='320'" 
      + "alt='' src='sample.jpg' width='240' border='0' ></td>" 
      + "<td>フレームを使って編集することもできる </td></tr>" 
      + "</table></p>";
    flag = true;
  }else{
    C1SuperLabel1.Text
      = "<p align='center'><strong><font size='5'>あらかじめ" 
      + "<font color='#ff0080'>エディタ</font>で" 
      + "<font color='#800080'>HTMLタグ</font>付きの<br>" 
      + "文字を作成する<br><br><table cellspacing='0'" 
      + "cellpadding='0' width='168' border='1' style='width:" 
      + "168px; height: 62px' align='center'>"
      + "<tr><td bgcolor='#00ffff'>" 
      + "テーブルの</td></tr><tr><td bgcolor='#ffff00'> 挿入も</td>" 
      + "</tr><tr><td bgcolor='#ff80c0'> 可能</td></tr></table>" 
      + "</font></strong></p>";
    flag = false;
  }
}

Form2でのC1SuperLabelコンポーネントの文字列設定

 Form2のC1SuperLabelコンポーネントでは、TextBoxに入力された文字列からHTML文を作成し、C1SuperLabelコンポーネントのTextプロパティに設定しています。これは、通常の文字列連結演算子を使用してHTML文を作成します。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
  Me.C1SuperLabel2.Text = _
   "<p align=""center""><font size=""5""><font color=""#35ca57"">" & _
                            Me.TextBox1.Text & _
                            "</font>-<font color=""#fb0467"" > " & _
                            Me.TextBox2.Text & _
                            "</font>-<font color=""#8000ff"" > " & _
                            Me.TextBox3.Text & _
                            "</font></font></p>"
End Sub
C#
private void Button1_Click(object sender, EventArgs e)
{
  C1SuperLabel2.Text
   = "<p align='center'><font size='5'><font color='#35ca57'>" 
                       + TextBox1.Text 
                       + "</font>-<font color='#fb0467' > "
                       + TextBox2.Text
                       + "</font>-<font color='#8000ff' > "
                       + TextBox3.Text + "</font></font></p>";
}

C1SuperTooltipコンポーネントの文字列の設定

 これも、C1SuperLabelと同様に文字列エディタを使用して、ツールヒント内のコンテンツを作成しますが、エディタ以外にセパレータや画像を組み込むための機能が用意されています。

 ここでは、2つのC1SuperTooltipコンポーネントをフォームに組み込み、C1SuperLabelとButtonにツールヒントを設定しますが、それぞれ違うデザインのツールヒントを作成するようにします。

C1SuperTooltipのデザイン時の設定

 フォームにC1SuperTooltipコンポーネントを配置すると、フォーム上の他のコントロールやコンポーネントのプロパティウィンドウに、「C1SuperTooltip1のToolTip」というプロパティが追加されます。

C1SuperLabelに追加された「C1SuperTooltip1のToolTip」プロパティ
 C1SuperLabelに追加された「C1SuperTooltip1のToolTip」プロパティ

 このプロパティの値欄の[...]ボタンをクリックすると、ツールヒントのコンテンツを設定するエディタが起動しますので、これを使ってHTML文の入力やセパレータ・画像などの設定を行います。

 また、C1SuperTooltipコンポーネントのタスクメニューで、ツールヒントの背景のグラデーションを変えることができます。[Is Balloon]にチェックを入れると、角の丸いツールヒントにすることができます。

C1SuperTooltipエディタ
 C1SuperTooltipエディタ
タスクメニューで背景のグラデーションを設定する
 タスクメニューで背景のグラデーションを設定する

コードから文字列を設定する

 コードから、C1SuperTooltipコンポーネントにHTML文を設定する場合は、SetToolTipメソッドを使用します。引数は2つで、1つはツールヒントを設定するコントロール・コンポーネントを指定します。2番目の引数に、表示するコンテンツをHTML文で設定します。

Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
  Me.C1SuperTooltip1.SetToolTip(Me.Button1, _
    "<table><tr> <td><parm><img src=""res://PHONE16.ICO"">" & _
    "</parm></td><td><b><parm>連絡先を作成します。" & _
    "</parm></b></td>" & _
    "</tr></table><parm>" & _
    "<hr noshade size=1 style=""margin:2"" color=Darker></parm>" & _
    "<div style=""margin:1 12""><parm><p><font color=""#ff0080"">" & _
    "電話番号</font>を入力して<br>" & _
    "この<font color=""#008040"">ボタン</font>を押してください。" & _
    "</p></parm></div><parm></parm><table><tr><td><parm>" & _
    "</parm></td><td><b><parm></parm></b></td></tr></table>")
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
  c1SuperTooltip1.SetToolTip(Button1, 
       "<table><tr> <td><parm><img src='res://PHONE16.ICO'>" 
    + "</parm></td><td><b><parm>連絡先を作成します。</parm></b></td>"
    + "</tr></table><parm>"
    + "<hr noshade size=1 style='margin:2' color=Darker></parm>"
    + "<div style='margin:1 12'><parm><p><font color='#ff0080'>" 
    + "電話番号</font>を入力して<br>"
    + "この<font color='#008040'>ボタン</font>"
    + "を押してください。</p></parm></div><parm></parm>"
    + "<table><tr><td><parm>"
    + "</parm></td><td><b><parm></parm></b></td></tr></table>");
}

まとめ

 C1SuperLabelとC1SuperTooltipコンポーネントは、HTMLでコンテンツを作成できる、とても魅力的なコンポーネントです。

 Webブラウザに依存することなく、コンポーネント自身に独自の軽量HTML パーサーおよびレンダラーを内蔵しており、カスケードスタイルシート、テーブル、画像表示などのほとんどのHTML機能を使うことができます。

 これらのコンポーネントを使えば、プログラム内にWebページと同等のコンテンツを表示させることができますので、ぐっと表現力が増しデザイン性の高いプログラムを開発できると思います。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1650 2008/06/24 15:08

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング