100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C#自定义控件添加事件例程

C#自定义控件添加事件例程

时间:2019-07-10 23:20:45

相关推荐

C#自定义控件添加事件例程

根据网络资源修改编写的一个进度条控件,主要是记录开发过程。

用户可以根据自己需要修改相应代码,或直接使用控件。也可以将代码作为子能够以控件的学习资料

写作目的主要是防止以后忘记。

编译环境 VS C# XP sp3

详细的DLL及源代码 还有测试程序请 下载地址

/download/anlog/10935465

详细控件源代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;//绘图using System.Windows;using System.Windows.Forms;using ponentModel;namespace ClassLibrary1{public class AnlogProgress:Control{/// <summary>/// /// </summary>public AnlogProgress() //构造函数{//打开双缓冲 禁止重绘背景 控件尺寸改变时要重绘 用户自绘 都设置为真 防止控件闪烁//this.SetStyle( ControlStyles.AllPaintingInWmPaint |//ControlStyles.OptimizedDoubleBuffer |//ControlStyles.ResizeRedraw |//ControlStyles.UserPaint,//true);this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);//参考 网址 /zh-cn/dotnet/api/system.windows.forms.controlstyles?redirectedfrom=MSDN&view=netframework-4.7.2//网址 /bomo/archive//12/11/2813369.htmlthis.MouseDown += AnlogProgress_MouseDown;this.MouseMove += AnlogProgress_MouseMove;this.MouseUp += AnlogProgress_MouseUp;}/Point originPoint;Point originsetRectPoint;bool setRectDown = false;void AnlogProgress_MouseUp(object sender, MouseEventArgs e){setRectDown = false;}void AnlogProgress_MouseMove(object sender, MouseEventArgs e){if (setRectDown){int dd = e.Location.X - originPoint.X;double percent = (double)(originsetRectPoint.X + dd - this.backRect.X) / (this.backRect.Width - this.backRect.Height);if (percent < 0){this.Value = minimum;this.foreRect.Width = 0;this.setRect.X = backRect.X;}else if (percent > 1){this.Value = maximum;this.foreRect.Width = this.backRect.Width;this.setRect.X = backRect.X + backRect.Width - backRect.Height;}else{this.Value = percent * maximum;this.foreRect.Width = (int)(percent * this.backRect.Width);this.setRect.X = originsetRectPoint.X + dd;}Invalidate();}}void AnlogProgress_MouseDown(object sender, MouseEventArgs e){if (setRect.Contains(e.Location)){this.originPoint = e.Location;originsetRectPoint = this.setRect.Location;this.setRectDown = true;}}//Rectangle forceRect; //进度条进度区域 他是随着进度而改变的//Rectangle backRect; //进度条整体区域 它的尺寸是相对稳定的//Rectangle setRect;//进度控制块区域 他是正方形的,它的高度与进度条高度相同//Color backgroundColor = Color.White;//是进度条整体区域的颜色//Color forceColor= Color.Gray; //进度条颜色 为灰色//Color setColor = Color.Black;//Rectangle foreRect;Rectangle backRect;Rectangle setRect;Color backgroundColor = Color.White;Color foregroundColor = Color.Gray;Color setRectColor = Color.Black;Color fontColor = Color.Black;int maximum = 100;int minimum = 0;double myValue = 0;bool showPercent;float fontSize = 9;FontFamily myFontFamily = new FontFamily("宋体");//[Category("General"), Description("Show Percent Tag"), Browsable(true)]public bool ShowPercentTag{get { return showPercent; }set{showPercent = value;Invalidate();}}[Category("General"), Description("Control's Maximum"), Browsable(true)]public int Maximum{get { return maximum; }set{maximum = value;Invalidate();}}[Category("General"), Description("Control's Minimum"), Browsable(true)]public int Minimum{get { return minimum; }set{minimum = value;Invalidate();}}[Category("General"), Description("Control's FontSize"), Browsable(true)]public float FontSize{get { return fontSize; }set{this.fontSize = value;Invalidate();}}[Category("General"), Description("Control's FontFamily"), Browsable(true)]public FontFamily MyFontFamily{get { return myFontFamily; }set{this.myFontFamily = value;Invalidate();}}[Category("Color"), Browsable(true)]public Color BackgroundColor{get { return backgroundColor; }set{this.backgroundColor = value;Invalidate();}}[Category("Color"), Browsable(true)]public Color ForegroundColor{get { return foregroundColor; }set{this.foregroundColor = value;Invalidate();}}[Category("Color"), Browsable(true)]public Color SetRectColor{get { return setRectColor; }set{this.setRectColor = value;Invalidate();}}[Category("Color"), Browsable(true)]public Color FontColor{get { return fontColor; }set{this.fontColor = value;Invalidate();}}///[Category("General"), Description("Control's Width"), Browsable(true)]public new int Width{get { return base.Width; }set{base.Width = value;foreRect.X = backRect.X = base.Width / 20;backRect.Width = base.Width * 9 / 10;foreRect.Width = (int)(myValue / maximum * backRect.Width);setRect.X = (int)(myValue / maximum * (backRect.Width - backRect.Height) + foreRect.X);Invalidate();}}[Category("General"), Description("Control's Height"), Browsable(true)]public new int Height{get { return base.Height; }set{base.Height = value;foreRect.Height = backRect.Height = setRect.Height = setRect.Width = base.Height / 3;foreRect.Y = backRect.Y = setRect.Y = base.Height / 3;Invalidate();}}protected EventHandler OnValueChanged;public event EventHandler ValueChanged{add{if (OnValueChanged != null){foreach (Delegate d in OnValueChanged.GetInvocationList()){if (object.ReferenceEquals(d, value)) { return; }}}OnValueChanged = (EventHandler)bine(OnValueChanged, value);}remove{OnValueChanged = (EventHandler)Delegate.Remove(OnValueChanged, value);}}/[Category("General"), Description("Control's Value"), Browsable(true)]public double Value{get { return myValue; }set{if (myValue < Minimum)throw new ArgumentException("小于最小值");if (myValue > Maximum)throw new ArgumentException("超过最大值");myValue = value;foreRect.Width = (int)(myValue / maximum * backRect.Width);setRect.X = (int)(myValue / maximum * (backRect.Width - backRect.Height) + backRect.X);if ((myValue - maximum) > 0){foreRect.Width = backRect.Width;setRect.X = backRect.Width - backRect.Height + backRect.X;}//如果添加了响应函数,则执行该函数if (OnValueChanged != null){OnValueChanged(this, EventArgs.Empty);}Invalidate();}}/protected override void OnResize(EventArgs e){base.OnResize(e);this.Width = Width;this.Height = Height;Invalidate();}///protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);DrawRect(e.Graphics);DrawText(e.Graphics);}private void DrawRect(Graphics e){Pen pen = new Pen(this.foregroundColor);e.FillRectangle(new SolidBrush(this.backgroundColor), backRect);e.DrawRectangle(new Pen(Color.Black), backRect);e.FillRectangle(new SolidBrush(this.foregroundColor), foreRect);e.DrawRectangle(new Pen(Color.Black), foreRect);e.FillRectangle(new SolidBrush(this.setRectColor), setRect);e.DrawRectangle(new Pen(Color.Black), setRect);}private void DrawText(Graphics e){Point point = new Point();point.X = this.backRect.X + this.backRect.Width * 3 / 7;point.Y = this.backRect.Y + this.backRect.Height / 3;SolidBrush brush = new SolidBrush(fontColor);Font font = new Font(myFontFamily, this.fontSize);string percent = ((int)this.myValue).ToString() + "%";StringFormat format = new StringFormat();format.Alignment = StringAlignment.Center;format.LineAlignment = StringAlignment.Center;e.DrawString(percent, font, brush, backRect, format);}}}

测试代码如下

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsAnlogProgressTest{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void timer1_Tick(object sender, EventArgs e){try{if (anlogProgress1.Value + 1 < anlogProgress1.Maximum){anlogProgress1.Value += 1;}else{anlogProgress1.Value = 0;}label1.Text = anlogProgress1.Value.ToString();anlogProgress2.Value = anlogProgress1.Value;}catch{}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。