开发拥有自定义事件的控件(一)

拥有计时功能的进度条控件

.NET Framework提供了拥有丰富特性的可视化控件,给开发带来了很大的方便。但这些控件都是针对通用场景设计的,在实际开发中,往往需要一些拥有特定功能的控件,人们通常选择在已有控件的基础上加以组合或扩充以得到这些“新的”自定义控件,毕竟完全从零开始开发不是一件简单的事情。

 本例所开发的这个控件,是一个进度条与定时器的组合控件,名为“TimeProgressBar”。它可以设置一个具体的时间(比如30秒钟),单击“确定”按钮,随着时间流逝,进度条就开始“走”,当设定的时间到时,进度条达到100%,同时激发一个事件TimeIsUp。

 1.使用Visual Studio创建一个Windows窗体控件库项目TimeProgressBar。Windows控件库类型的项目其实就一个类库,只不过其中存放的主要是可视化的控件,这些控件可以被放置到Visual Studio的工具箱中。

 2.将Visual Studio自动生成的UserControl1.cs文件改名为“TimeProgressBar.cs”,Visual Studio会自动更改自定义控件的类名为TimeProgress。从工具箱上拖一个Timer控件和一个ProgressBar控件到自定义控件TimeProgressBar的设计视图中,设置ProgressBar的Dock属性为Fill,Timer控件的Interval属性为1000,如图所示。

 3.下面为TimeIsUp事件定义一个委托:

public delegate void TimeIsUpDelegate();    //委托
//接着为此自定义控件定义“TimeIsUp”事件
public event TimeIsUpDelegate TimeIsUp;     //自定义控件的“TimeIsUp”事件

 在使用此控件时,程序员可调用它的SetTimeSpan方法设置计时时间长度:

  public void SetTimeSpan(int second) 
  {
      ElapsedTime = 0;
      TotalTime = second;
      progressBar1.Maximum = second;
      timer1.Enabled = true;
  }

 真正的计时工作有Timer控件完成,Timer控件每隔1秒(因为其Interveral属性设为1000)调用一个Begin方法,在在方法中完成计时工作,当时间到时,激发TimeIsUp事件,其代码如下:

 private void Begin(object sender, EventArgs e)
 {
     ElapsedTime++;   	//计算已流逝的时间
     progressBar1.Value = ElapsedTime;   //设置进度条刻度以显示时间流逝状态
     if (ElapsedTime >= TotalTime)	//时间到了
     {
         timer1.Enabled = false;     //停止计时
         if (TimeIsUp != null)
         {
             TimeIsUp();     //激发事件
         }
     }
 } 

自定义控件开发完成以后,运行生成一个TimeProgressBar.dll文件,即可以在其它项目中使用。

4. 向解决方法中增加一个新的Windows应用程序项目Use,生成解决方案,在工具箱中右键鼠标点击选择项,弹出选择工具项对话框,点击浏览,找到刚刚生成的TimeProgressBar.dll文件,点击确定。此时,工具箱中就添加了我们自定义的TimeProgressBar控件。

 

 

现在即可将此控件拖到窗体上设计用户界面,并且在其属性窗口中可以看到自定义的事件TimeIsUp已经出现在“事件”面板中。

完整代码如下:

public partial class Use : Form
{
    public Use()
    {
        InitializeComponent();
    }

    private void m_btn_Set_Click(object sender, EventArgs e)
    {
        timeProgressBar1.SetTimeSpan(Convert.ToInt32(numericUpDown1.Value));
            
    }

    private void timeProgressBar1_TimeIsUp()
    {
        MessageBox.Show("时间到!");
    }
}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值