各位前辈,
怎么在C#的winForm中创建我自己要定义的控件,
我还是新手,请详细说明要创建哪一种项目工程以及步骤说明。
怎么在C#的winForm中创建我自己要定义的控件,
我还是新手,请详细说明要创建哪一种项目工程以及步骤说明。
解决方案 »
- 我以前是做web方面的,求教几个软件方面的思路和相关资料,谢谢。
- 如何测出字符串末尾是否是"\r\n"。函数String.IndexOf无法测出字符串末尾的"\r\n",怎么办?只有"\r\n"的行为空行,除了用字符串长度为0来判断外,还有什么方法判断只包含
- [求资料]是关于数据库正确设计的最好有案例
- 如何获取网卡真实的MAC地址??????????????????????
- 上传文件时,取得的中文件名为乱码!
- 哪里有Tablet PC SDK下载?
- 怎么获取系统windows和program files目录的位置
- 如何把access中表的结构取出,写入word文档。
- ♦♦请问有没有更快的清屏函数和复制函数♦♦
- !!!请问各位,如何将DataGrid表中的数据读入到内存变量中???
- C#~如何获得选中的菜单项的Tag值。
- 如何用DO-WHILE输出九九乘法表(在C#中)
• 第一步:新建一个windows控件库项目
• 第二步:重写OnPaint
• 第三步:向自定义控件添加属性
• 第四步:给自定义控件增加自定义的图标
• 第五步:生成自定义控件
示例代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;namespace SmoothProgressBar
{
[ToolboxBitmap(typeof(ProgressBar))]
//可以建控件库项目
public partial class SmoothProgressBar : UserControl
{
int min = 0; // Minimum value for progress range
int max = 100; // Maximum value for progress range
int val = 0; // Current progress
Color BarColor = Color.Blue; // Color of progress meter
protected override void OnResize(EventArgs e)
{ // Invalidate the control to get a repaint. this.Invalidate(); }
protected override void OnPaint(PaintEventArgs e)
{ Graphics g = e.Graphics; SolidBrush brush = new SolidBrush(BarColor); float percent = (float)(val - min) / (float)(max - min); Rectangle rect = this.ClientRectangle; // Calculate area for drawing the progress. rect.Width = (int)((float)rect.Width * percent); // Draw the progress meter. g.FillRectangle(brush, rect); // Draw a three-dimensional border around the control. Draw3DBorder(g); // Clean up. brush.Dispose(); g.Dispose(); }
public int Minimum
{ get
{ return min; } set
{ // Prevent a negative value. if (value < 0)
{ min = 0; } // Make sure that the minimum value is never set higher than the maximum value. if (value > max)
{ min = value; min = value; } // Ensure value is still in range if (val < min)
{ val = min; } // Invalidate the control to get a repaint. this.Invalidate(); } }
public int Maximum
{ get
{ return max; } set
{ // Make sure that the maximum value is never set lower than the minimum value. if (value < min)
{ min = value; } max = value; // Make sure that value is still in range. if (val > max)
{ val = max; } // Invalidate the control to get a repaint. this.Invalidate(); } } public int Value
{ get
{ return val; } set
{ int oldValue = val; // Make sure that the value does not stray outside the valid range. if (value < min)
{ val = min; } else if (value > max)
{ val = max; } else
{ val = value; } // Invalidate only the changed area. float percent; Rectangle newValueRect = this.ClientRectangle; Rectangle oldValueRect = this.ClientRectangle; // Use a new value to calculate the rectangle for progress. percent = (float)(val - min) / (float)(max - min); newValueRect.Width = (int)((float)newValueRect.Width * percent); // Use an old value to calculate the rectangle for progress. percent = (float)(oldValue - min) / (float)(max - min); oldValueRect.Width = (int)((float)oldValueRect.Width * percent); Rectangle updateRect = new Rectangle(); // Find only the part of the screen that must be updated. if (newValueRect.Width > oldValueRect.Width)
{ updateRect.X = oldValueRect.Size.Width; updateRect.Width = newValueRect.Width - oldValueRect.Width; } else
{ updateRect.X = newValueRect.Size.Width; updateRect.Width = oldValueRect.Width - newValueRect.Width; } updateRect.Height = this.Height; // Invalidate the intersection region only. this.Invalidate(updateRect); } } public Color ProgressBarColor
{ get
{ return BarColor; } set
{ BarColor = value; // Invalidate the control to get a repaint. this.Invalidate(); } } private void Draw3DBorder(Graphics g)
{ int PenWidth = (int)Pens.White.Width; g.DrawLine(Pens.DarkGray, new Point(this.ClientRectangle.Left, this.ClientRectangle.Top), new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top)); g.DrawLine(Pens.DarkGray, new Point(this.ClientRectangle.Left, this.ClientRectangle.Top), new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth)); g.DrawLine(Pens.White, new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth), new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth)); g.DrawLine(Pens.White, new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top), new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth)); }
public SmoothProgressBar()
{
InitializeComponent();
}
}
}