#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 { /// /// 線を常に引くコントロール /// public class WankumaLine : System.Windows.Forms.UserControl { #region public enum enum線パターン /// /// 線の描画種類 /// public enum enum線パターン { /// /// 対角に線を引きます。\ /// 対角バックスラッシュ, /// /// 対角に線を引きます。/ /// 対角スラッシュ, /// /// 水平に線を引きます- /// 水平, /// /// 垂直に線を引きます。| /// 垂直 } #endregion #region メンバ #region private float _線幅; /// /// 線幅のメンバ /// private float _線幅; #endregion #region public float 線幅 /// /// 描画する線幅を指定する /// [DefaultValue(1.0F)] public float 線幅 { set { if ( value < 1.0 ) { this._線幅 = 1.0F; } else { this._線幅 = value; } } get { return this._線幅; } } #endregion #region private enum線パターン _pattern; /// /// 線のパターン /// private enum線パターン _pattern; #endregion #region public enum線パターン 線パターン /// /// 線のパターン /// [DefaultValue(enum線パターン.対角バックスラッシュ)] public enum線パターン 線パターン { set { this._pattern = value; } get { return this._pattern; } } #endregion #endregion #region 自動生成 /// /// 必要なデザイナ変数です。 /// private System.ComponentModel.Container components = null; /// /// コンストラクタ /// public WankumaLine() { // この呼び出しは、Windows.Forms フォーム デザイナで必要です。 InitializeComponent(); // TODO: InitializeComponent 呼び出しの後に初期化処理を追加します。 SetStyle(ControlStyles.ResizeRedraw, true); this._線幅 = 1.0F; } /// /// 使用されているリソースに後処理を実行します。 /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region コンポーネント デザイナで生成されたコード /// /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// private void InitializeComponent() { // // WankumaLine // this.Name = "WankumaLine"; } #endregion #endregion #region protected override void OnPaint(PaintEventArgs e) /// /// 描画処理 /// /// 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