重写C# winform 进度条的样式(要代码示例)

重写C#winform进度条的样式,需要上面的进度条样式,要代码示例谢谢... 重写C# winform 进度条的样式,需要上面的进度条样式,要代码示例谢谢 展开
 我来答
安全管理人12345gf
推荐于2016-02-06 · TA获得超过5523个赞
知道大有可为答主
回答量:5473
采纳率:62%
帮助的人:1217万
展开全部
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)); 
}
wangpaishi
2013-09-12 · TA获得超过570个赞
知道小有建树答主
回答量:932
采纳率:52%
帮助的人:760万
展开全部
无需重写
自己新建个组建,继承自Control或PictureBox
自己绘制进度
向外提供最小值最大值当前值属性或方法即可
当值改变时,重绘
override OnPaint
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
y85171642
推荐于2016-07-23 · TA获得超过130个赞
知道小有建树答主
回答量:175
采纳率:0%
帮助的人:78.2万
展开全部
http://www.yesky.com/427/1878927.shtml
这个连接上的内容看一下就OK了
我看了UserControl和Control类的区别还是有区别的,Control类继承了实现了更多的接口,很复杂。UserControl就只单纯的提供简单的灵活的控件自定义!
Control类不能被继承(可以继承,可是里面要怎么写呢?不知道了),应为封装的你看不到他里面的方法实现!所以要继承UserControl
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式