{A}{S0}简介
,在这篇文章中我将显示您的自定义进度控制,我作为替代常规Visual Studio ProgressBar组件。所以,我们将讨论:
如何创建一个自定义组件如何创建自定义事件和属性显示在属性窗口如何使用Paint事件的绘图和图形,以及如何使用渐变画笔背景
自定义控件从一个UserControl继承。一个UserControl称为漆事件,也就是所谓的控制每次需要重绘。我们将利用这个事件来绘制的进展。创建这个组件是非常简单:我们只需要绘制一个椭圆形(将剩余的时间)和馅饼(将所用的时间),下面的代码:e.Graphics.FillEllipse(t_oBrushRemainingTime, t_oRectangle);
e.Graphics.FillPie(t_oBrushElapsedTime, t_oRectangle, -90f,
(float)(360 * m_iElapsedTime / m_iTotalTime));
可以使用图形绘制的事情,最需要的是一个矩形,画的界限。此矩形被定义为组件的大小相同。{C}
要创建一个渐变的视觉效果涂装前的椭圆形,馅饼,两个不同的画笔变量定义剩余的时间和所用的时间来创建不同的视觉效果,如下所示:
我们将继续跟踪两个变量:m_iElapsedTime(保持实际价值ProgressBar的财产价值一样吗??)和m_iTotalTime(即保持的时间同样为ProgressBar的最大财产?? )。这两个变量是用来计算的角度表示经过时间的馅饼。因为任何人都知道,一个完整的圆360 °。为了得到实际的角度,我们只是m_iElapsedTime / m_iTotalTime * 360。
书面的唯一方法是递增()方法。它有一个整数作为参数,它是将被添加到m_iElapsedTime数量。但在此之前,我们只是检查是否m_iElapsedTime是m_iTotalTime更大。如果是这样,这意味着任务完成,并且该方法返回。如果不是更大,它被选中,如果要添加的值加m_iElapsedTime是大于或等于比m_iTotalTime。如果是这样,我们m_iElapsedTime平等m_iTotalTime,更新的控制和提高这两个事件,PCIncremented和PCComplete。如果不是更大,我们增加m_iElapsedTime,更新组件和提高PCIncremented事件。见下面的代码:if (m_iElapsedTime > m_iTotalTime)
return;
if (m_iElapsedTime + a_iValue >= m_iTotalTime)
{
m_iElapsedTime = m_iTotalTime;
this.Refresh();
if (m_EventIncremented != null)
m_EventIncremented(this, null);
if (m_EventCompleted != null)
m_EventCompleted(this, null);
}
else
{
m_iElapsedTime += a_iValue;
this.Refresh();
if (m_EventIncremented != null)
m_EventIncremented(this, null);
}
创建这些自定义事件(PCIncremented和PCComplete),我们创建一个名为EventHandler的委托。在此委托,现在我们声明两个变量的类型的EventHandler称为m_EventIncremented和m_EventCompleted,与修改事件,如下所示:
public delegate void EventHandler(object sender, string message);
public event EventHandler m_EventIncremented;
public event EventHandler m_EventCompleted;
引发一个事件,我们只需要检查,如果变量初始化,然后调用它。见下文:if (m_EventCompleted != null)
m_EventCompleted(this, null);
为了使这些事件可浏览在属性窗口的事件列表中,我们需要为他们创造的属性,并把摆在它面前的括号内的几个属性。主要属性是类别(),并设置它时会显示,在分类类别。其他属性的说明(),在属性窗口的底部显示一个简要说明。各自的属性的两个自定义事件的属性如下:
使用代码[Category("ProgressCircle"), Description(
"Event raised everytime the component is incremented." +
"Author: Sergio Augusto Bitencourt Petrovcic")]
public event EventHandler PCIncremented
{
add { m_EventIncremented += new EventHandler(value); }
remove { m_EventIncremented -= new EventHandler(value); }
}
[Category("ProgressCircle"), Description(
"Event raised when the component get completed." +
"Author: Sergio Augusto Bitencourt Petrovcic")]
public event EventHandler PCCompleted
{
add { m_EventCompleted += new EventHandler(value); }
remove { m_EventCompleted -= new EventHandler(value); }
}
的源代码有两个项目。第一个实现组件,并生成一个程序集。第二个是一个测试项目,即第一个作为参考。所以,如果我们开放的测试项目的主要形式和工具箱,我们会看到组件。我们只需要拖放到下降的形式。
如果你想在自己的项目中使用这个组件,您只需将组件添加到项目的工具箱。只需右键单击工具箱,单击"选择项。然后单击浏览和搜索ProgressCircle.dll。单击打开和确定。之后,只需拖放到表单中。
要配置的组件,您可以使用属性窗口来改变颜色,其余的和经过时间的梯度变化的线性渐变模式,组件,并设置事件和经过时间。你的任务流,只需调用递增()传递参数THA值递增。这是所有!因为这只是简单的。历史
* 2008年4月 - 首先发布。
版权所有© 2007塞尔吉奥A. B. Petrovcic。保留所有权利。不要发布到其他网站未经我的明确许可。按照本网站的政策和程序,链接到这篇文章。
| sergioabp