NUnit源码研读随笔 ------ 定制用户控件的属性与事件

     本文结合NUnit源码,简单地绍一下用户控件的属性与事件的定制,希望对大家有所帮助。

     在"nunit.uikit.dll"项目中有TestSuiteTreeView.cs文件,该文件主要实现一个自定义的treeview控件,NUnit工具gui窗口中的树就继承自该控件。

      1、定制属性:

            在TestSuiteTreeView类中有如下代码:

            [Category( "Behavior" ), DefaultValue( true )]
  [Description("Indicates whether the tree context menu should include a run command")]
  public bool RunCommandSupported
  {
   get { return runCommandSupported; }
   set { runCommandSupported = value; }
  }

           [Category( "Behavior" ), DefaultValue( true )]
           ------ 当visual designer 按分类顺序模式显示时,在visual designer 的属性列表中,RunCommandSupported属性显示在Behavior类别中,且初始值为true;

           [Description("Indicates whether the tree context menu should include a run command")]
           ------ 指定该属性在visual designer中显示时的描述;

 显示效果如下:

TestSuitetTreeView%20Attribute.jpg

2、定制事件(event):

       下面主要介绍该树形控件中SelectedTestChanged事件的定制过程。

        (1)、声明委托(delegate):

                 public delegate void SelectedTestChangedHandler( UITestNode test );

        (2)、在类TestSuiteTreeView中定义事件event:

                  public event SelectedTestChangedHandler SelectedTestChanged;

        (3)、接下来就要定制该事件的触发时机,这里重载了TreeView.OnAfterSelect方法,代码如下:

                 protected override void OnAfterSelect  System.Windows.Forms.TreeViewEventArgs e)
  {
   if ( SelectedTestChanged != null )
    SelectedTestChanged( SelectedTest );

   base.OnAfterSelect( e );
  } 

                 即在OnAfterSelect事件触发时,首先判断有没有SelectedTestChanged 实例存在,如果有则按顺序调用,再调用基类方法。

显示效果如下:

TestSuitetTreeView%20Event.jpg

          (4)、此处给出该定制控件在TestUnit.cs中的的应用:

         a、定义方法:

               private void tests_SelectedTestChanged(UITestNode test)
  {
   if (SelectedTestsChanged != null)
   {
       SelectedTestsChangedEventArgs args = new SelectedTestsChangedEventArgs(test.Name, test.CountTestCases());
    SelectedTestsChanged(tests, args);
   }
  }

           b、创建SelectedTestChangedHandler实例,并与SelectedTestChanged 关联:

         tests.SelectedTestChanged += new SelectedTestChangedHandler(tests_SelectedTestChanged);

           当然这两步都可通过设计器中双击实现。emsmile.gif

        (5)、ok.

 

以上只是粗略地分析了一下定制自定义控件属性、事件的过程,一些细节可能还要自己去摸索,在下只是在看源码的同时写一点随笔,肯请指正;

大家在繁忙的工作之余,不防抽点时间去看看好的开源项目源码,相信一定有自己需要东西!!!

emsmile.gif 

转载于:https://www.cnblogs.com/seekinghu/archive/2005/08/29/225194.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值