セパレーターコンポーネントを作成する (ダイアログなどの区切り線コンポーネントの作成) - C#

概要

ダイアログボックスなどで使われる区切り線を使いたい場合があります。C#のWinformではseparatorコンポーネントは用意されていないため(WPFアプリケーションではSeparatorコンポーネントがあります。)separatorコンポーネントを自前で作成して代用します。
Separatorコンポーネントの実装方法は、キャンバスに描画する方法やグループボックスを使う方法などいくつかありますが、今回はLabelコントロールを用いて実装します。

しくみ

ウィンドウコントロールの高さ方向の中心に高さ2のラベルコントロールを配置します。ラベルコントロールの幅はウィンドウコントロールと同じ幅にします。ラベルのBorderStyle を BorderStyle.Fixed3Dに設定します。コントロールがリサイズされた場合内部のラベルの幅も変更します。

実装例

コード

新規作成で[プロジェクトの新規作成]で[クラスライブラリ]を新規作成し、[新しい要素の追加]で[コンポーネントクラス]を新規作成します。
コントロールクラス作成時にinitLabelでラベルコントロールの作成と初期化をします。サイズ変更や配置はOnResizeメソッドをオーバーライドし、その中で処理します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Separator
{
  public partial class iPentecSeparator : Control
  {
    Label label;

    public iPentecSeparator()
    {
      InitializeComponent();
      initLabel();
    }

    public iPentecSeparator(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
      initLabel();
   }

    private void initLabel(){
      label = new Label();
      label.AutoSize = false;
      label.BorderStyle = BorderStyle.Fixed3D;
     }

    protected override void OnResize(EventArgs e)
    {
      base.OnResize(e);
    
      label.Parent = this;

      label.Left = 0;
      label.Top = (int)(this.Height / 2.0);
      label.Width = this.Width;
      label.Height = 2;
    }
  }
}

実行結果



著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2010-06-08
iPentec all rights reserverd.