教你做MSN样式的控件

我想尝试一下写文章的,就写下了这篇文章希望能够给C#的初学者给与一点提示。上午做了一个MSN样式的控件,我就以此为例教大家做控件。让大家感受一下 .net给我们带来的 方便。体验一下他快速开发的能力。下面我先介绍控件的大体结构(如图所示)

     http://dongde.com/down/1.jpg
Bars和PageCollection为俩个集合分别来控制 bar 和page ,下面我说说我写控件碰到的一些难点,第一个就是控件做好了,如何在自己以后的编程不写代码就能完成界面的设计,这个。net已经给我们准备好一套很好的机制,只要照着用就可以了,我参照了 微软的tabcontrol 写法,通过设置属性就可以添加选型卡,我的做法为[Category("Appearance")]
  [Description("在这里添加选项卡了")]
  [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
  public PageCollection PagesItem
  {
   get
   {
    return this.pages;
   }
  }
  [Category("Appearance")]
  public Panel Bars
  {
   get
   {
    return this.myBars;
   }
  }
注意这条属性哦  [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)],具体什么意思还是你自己看看帮助了,
第二个难点就是如何控制控件在设计时候的状态就是说什么时候把消息教给控件处理,什么时候把消息交给设计器来处理,在这一点我做的不是很成功,我是把消息都交给控件处理,虽然试图精确的控制但是还是没有能控制的住,
 protected override void WndProc(ref System.Windows.Forms.Message m)
  {
      this.DefWndProc(ref m); //把消息全交给了控件,缺点就是设计器都不能完成单击选中的功能了,但是你拖动还是可以的,
   #region garbage
//   switch(m.Msg)
//   {
//    case (int)Msgs.WM_MOUSEMOVE:
//     this.DefWndProc(ref m);
//     break;
//    case (int)Msgs.WM_LBUTTONDOWN:
//     if(this.Control != null)
//     {
//      int xPos = (short)((uint)m.LParam & 0x0000FFFFU);
//      int yPos = (short)(((uint)m.LParam & 0xFFFF0000U) >> 16);
//      Rectangle rect = new Rectangle(this.Control.Location,new Size(40,100));
//      if(rect.Contains(xPos,yPos))
//      {
//       this.DefWndProc(ref m);
//      }
//      else
//      {
//       base.WndProc(ref m);
//      }
//     }
//     break;
//    default:
//     base.WndProc(ref m);
//     break;
//   }
   #endregion

,下面说说如何使用,如果你用过tabcontrol,用我的控件就很容易了,通过设置 pageitem 属性 ,和page的barimage属性就可以了。好了一个接近完善的控件就做出来的,使用是那末的方便,只要把它加入工具箱就可以了,不需要每次都写一些复杂的代码,做控件是不时很容易哦 ,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值