相変わらず糞コードです。
using System; using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Drawing.Drawing2D; public partial class CSlider : Control { // イベントの宣言 [Description("コントロールの値が変更するとき発生します。")] [Category("アクション")] public event EventHandler ValueChanged; // プロパティ private int _maximum = 100; public int Maximum { set { this._maximum = value; } get { return this._maximum; } } public int Minimum { get; set; } private int _value; public int Value { set { this._value = value; drawGradation(); this.Refresh(); if (ValueChanged != null && Value <= Minimum && Value >= Maximum) ValueChanged(this, new EventArgs()); } get { return this._value; } } private Color _color1 = Color.Black; public Color Color1 { set { this._color1 = value; drawGradation(); this.Refresh(); } get { return this._color1; } } private Color _color2 = Color.White; public Color Color2 { set { this._color2 = value; drawGradation(); this.Refresh(); } get { return this._color2; } } public CSlider() { InitializeComponent(); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.Resize += new System.EventHandler(this.CSlider_Resize); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.CSlider_MouseMove); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CSlider_MouseDown); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.CSlider_MouseUp); this.MouseLeave += new System.EventHandler(this.CSlider_MouseLeave); this.MouseEnter += new System.EventHandler(this.CSlider_MouseEnter); drawTick(); } // 描画 //針の描画 private Bitmap tick; private void drawTick() { tick = new Bitmap(10, 10); Graphics g = Graphics.FromImage(tick); g.SmoothingMode = SmoothingMode.HighQuality; Point[] point = { new Point(5,1), new Point(9,5), new Point(9,7), new Point(8,8), new Point(2,8), new Point(1,7), new Point(1,5), new Point(5,1) }; Brush b = new SolidBrush(Color.White); g.FillPolygon(b, point); Pen p = new Pen(Color.Black, 1); if (activeFlag == true) { p = new Pen(Color.Brown, 1); } g.DrawLines(p, point); g.Dispose(); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); pe.Graphics.DrawImage(gradation, 5, 0, gradation.Width, gradation.Height); pe.Graphics.DrawImage(tick, (Value * gradation.Width) / (Maximum - Minimum), gradation.Height); } //グラデーションの描画 private Bitmap gradation; private void drawGradation() { if (this.Width > 10 && this.Height > 10) { Size gradationSize = new Size(this.Width - 10, this.Height - 10); gradation = new Bitmap(gradationSize.Width, gradationSize.Height); Graphics g = Graphics.FromImage(gradation); LinearGradientBrush gb = new LinearGradientBrush(new Point(0, 0), new Point(gradationSize.Width, gradationSize.Height), Color1, Color2); g.FillRectangle(gb, new Rectangle(0, 0, gradationSize.Width, gradationSize.Height)); //枠線 Pen p = new Pen(Color.Black, 1); if (activeFlag == true) { p = new Pen(Color.Brown, 1); } g.DrawRectangle(p, 0, 0, gradationSize.Width - 1, gradationSize.Height - 1); g.Dispose(); } } //リサイズ時、グラデーションの再描画 private void CSlider_Resize(object sender, EventArgs e) { drawGradation(); this.Refresh(); } //プロパティ private bool mouseDown = false; private void CSlider_MouseDown(object sender, MouseEventArgs e) { Value = (int)(((float)(e.X - 5) / (this.Width - 10)) * (Maximum - Minimum)); if (Value <= Minimum) Value = Minimum; if (Value >= Maximum) Value = Maximum; this.Refresh(); if (ValueChanged != null) ValueChanged(this, new EventArgs()); mouseDown = true; } private void CSlider_MouseMove(object sender, MouseEventArgs e) { if (mouseDown == true) { Value = (int)(((float)(e.X - 5) / (this.Width - 10)) * (Maximum - Minimum)); if (Value <= Minimum) Value = Minimum; if (Value >= Maximum) Value = Maximum; this.Refresh(); if (ValueChanged != null) ValueChanged(this, new EventArgs()); } } private void CSlider_MouseUp(object sender, MouseEventArgs e) { mouseDown = false; } private bool activeFlag = false; private void CSlider_MouseEnter(object sender, EventArgs e) { activeFlag = true; drawGradation(); drawTick(); this.Refresh(); } private void CSlider_MouseLeave(object sender, EventArgs e) { activeFlag = false; drawGradation(); drawTick(); this.Refresh(); } }
//日記 すき焼きともつ鍋食べた。うまかった。
失礼します。InitializeComponent()の中身はどこにありますでしょうか?
返信削除またライブラリ化した物はリンク先がありませんでした。
古い記事で恐縮ですが、お暇がありましたらよろしくお願いします。