中の技術日誌
 

わんくまライブラリ Wankuma.WindowsForms.WankumaLineクラス Version1

2005/07/16

この文書はVisual Studio 2003(.NET1.1)をベースに記述されています。それ以降のバージョンや、あなたが読んでいる時点では変更されている可能性があります。
またバージョンアップされている場合にはなんらかかの不具合を含んでいる可能性があります。

ドキュメントへ
Wankuma.WindowsForms.WankumaLine1d.htm

ソースファイル直接ダウンロードへ
Wankuma.WindowsForms.WankumaLine1c.txt

利用規約へ
../kiyaku.htm

#region Using
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Windows.Forms;
#endregion
namespace Wankuma.WindowsForms
{
  /// <summary>
  /// 線を常に引くコントロール
  /// </summary>
  public class WankumaLine : System.Windows.Forms.UserControl
  {
    #region public enum enum線パターン
    /// <summary>
    /// 線の描画種類
    /// </summary>
    public enum enum線パターン
    {
      /// <summary>
      /// 対角に線を引きます。\
      /// </summary>
      対角バックスラッシュ,
      /// <summary>
      /// 対角に線を引きます。/
      /// </summary>
      対角スラッシュ,
      /// <summary>
      /// 水平に線を引きます-
      /// </summary>
      水平,
      /// <summary>
      /// 垂直に線を引きます。|
      /// </summary>
      垂直
    }
    #endregion
    #region メンバ
    #region private float _線幅;
    /// <summary>
    /// 線幅のメンバ
    /// </summary>
    private float _線幅;
    #endregion
    #region public float 線幅
    /// <summary>
    /// 描画する線幅を指定する
    /// </summary>
    [DefaultValue(1.0F)]
    public float 線幅
    {
      set
      {
        if ( value < 1.0 )
        {
          this._線幅 = 1.0F;
        }
        else
        {
          this._線幅 = value;
        }
      }
      get
      {
        return this._線幅;
      }
    }
    #endregion
    #region private enum線パターン _pattern;
    /// <summary>
    /// 線のパターン
    /// </summary>
    private enum線パターン _pattern;
    #endregion
    #region public enum線パターン  線パターン
    /// <summary>
    /// 線のパターン
    /// </summary>
    [DefaultValue(enum線パターン.対角バックスラッシュ)]
    public enum線パターン  線パターン
    {
      set
      {
        this._pattern = value;
      }
      get
      {
        return this._pattern;
      }
    }
    #endregion
    #endregion
    #region 自動生成
    /// <summary>
    /// 必要なデザイナ変数です。
    /// </summary>
    private System.ComponentModel.Container components = null;
    /// <summary>
    /// コンストラクタ
    /// </summary>
    public WankumaLine()
    {
      // この呼び出しは、Windows.Forms フォーム デザイナで必要です。
      InitializeComponent();
      // TODO: InitializeComponent 呼び出しの後に初期化処理を追加します。
      SetStyle(ControlStyles.ResizeRedraw, true);
      this._線幅 = 1.0F;
    }
    /// <summary>
    /// 使用されているリソースに後処理を実行します。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if(components != null)
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }
    #region コンポーネント デザイナで生成されたコード 
    /// <summary>
    /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
    /// コード エディタで変更しないでください。
    /// </summary>
    private void InitializeComponent()
    {
      // 
      // WankumaLine
      // 
      this.Name = "WankumaLine";
    }
    #endregion
    #endregion
    #region protected override void OnPaint(PaintEventArgs e)
    /// <summary>
    /// 描画処理
    /// </summary>
    /// <param name="e"></param>
    protected override void OnPaint(PaintEventArgs e)
    {
      base.OnPaint (e);
      
      //線パターンにあわせて描画する。
      if ( this._pattern == enum線パターン.水平 || this._pattern == enum線パターン.垂直 )
      {
        using ( SolidBrush sb = new SolidBrush(this.ForeColor) )
        {
          //xy等を調べる
          float x = e.Graphics.VisibleClipBounds.X;
          float y = e.Graphics.VisibleClipBounds.Y;
          float width = e.Graphics.VisibleClipBounds.Width;
          float height = e.Graphics.VisibleClipBounds.Height;
          float width2 = x + this._線幅 > width ? width : x + this._線幅;
          float height2 = y + this._線幅 > height ? height : y + this._線幅;
        
          //線を描画する
          //線パターンにあわせて描画する。
          if ( this._pattern == enum線パターン.水平 )
          {
            //上辺
            e.Graphics.FillRectangle(sb, x, y, width, height2);
          }
          else if ( this._pattern == enum線パターン.垂直)
          {
            //左辺
            e.Graphics.FillRectangle(sb, x, y, x + width2, height);
          }
        }      
      }
      else if ( this._pattern == enum線パターン.対角バックスラッシュ || this._pattern == enum線パターン.対角スラッシュ )
      {
        using ( Pen pen = new Pen(this.ForeColor, this._線幅) )
        {
          //線の端をスクエアにする
          pen.StartCap = LineCap.Square;
          //xy等を調べる
          float x = e.Graphics.VisibleClipBounds.X;
          float y = e.Graphics.VisibleClipBounds.Y;
          float width = e.Graphics.VisibleClipBounds.Width;
          float height = e.Graphics.VisibleClipBounds.Height;
          //線パターンにあわせて描画する。
          if ( this._pattern == enum線パターン.対角バックスラッシュ )
          {
            e.Graphics.DrawLine(pen, x, y, width, height);
          }
          else if ( this._pattern == enum線パターン.対角スラッシュ )
          {
            e.Graphics.DrawLine(pen, width, y, x, height);
          }
        }
      }
      
      
    }
    #endregion
  
  }//class
}//namespace

2006/12/16 大阪勉強会#4 + 忘年会 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告