WinForm界面开发论(一)控件基本论

本文介绍如何使用.NET创建自定义Windows控件,并实现属性和事件的可视化编辑,包括设置文本和颜色属性,以及定义鼠标悬停事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    用.net开发windows程序,离不开控件的编写,微软的那堆控件里面,只提供了一些比较基本和典型的界面控件,对于现在五彩缤纷的软件,默认的控件集已很难满足用户的需求。既然是这样,让我们自己动手来创造自己的控件吧!

  1. 属性:我们做.net开发的,通常都会用鼠标在属性框里面设计控件,所以,一般你看到拼命敲键盘的,不要以为看到了代码超人,转过去看清楚点,在Q着呢!.net的设计器很好,所以不要什么都写在代码里面,最重要要做到设计器可视化!

    - 我们首先建立一个WindowApplication,在建一个WindowsControlLibrary,一般控件和窗口最好分开,目的当然是为了以后的可重用性了。

    - 这里我们以一个MyButton控件为例子,在WindowsControlLibrary里面建立一个叫MyButton的UserControl,上面放一个PictrueBox,再放一个Lable,如下图:


    - 我们假设要做一个属性,用来设置下面文字的文本和颜色,代码如下:
    [Description( " 按钮的文本显示 " )]
             public   string  MyButtonText
             {
                set
                {
                    this.label1.Text = value;
                }
                get
                {
                    return this.label1.Text;
                }
            }
    上面[Description("按钮的文本显示")]声明了该属性的作用,能在设计器属性框下面的说明里面看到,再看看设置文本颜色的代码:
    [Description( " 按钮的文本颜色 " )]
            
    public  Color MyButtonTextColor
            
    {
                
    set
                
    {
                    
    this.label1.ForeColor = value;
                }

                
    get
                
    {
                    
    return this.label1.ForeColor;
                }

            }
    我们用了Color类,那么,在属性框里面,能够使用和其它控件选择颜色时一样的选择窗口,非常方便吧!如果你觉得不够,或者类型是你自己定义的,那么还可以直接写一个设置窗口,后面我将会深入讲解!我们做完这些后,效果如下:


  2. 事件:事件是C#一个很重要的概念,因为他是完全面向对象的开发语言,所以在需要对象之间的调用和回调的各种方式,而事件就是最常见的回调机制了。下面,我们为这个控件写一个例子MouseOver的事件,当鼠标放在该控件时发生。
    public   delegate   void  dMouseOver(System.DateTime mouseOverTime);
            
    public   event  dMouseOver MouseOver;

            
    private   bool  MouseOverIsSend  =   false ;

            
    private   void  MyButton_MouseEnter( object  sender, EventArgs e)
            
    {
                
    if (MouseOver != null)
                
    {
                    
    if (!MouseOverIsSend)
                    
    {
                        
    this.MouseOver(DateTime.Now);
                        
    this.MouseOverIsSend = true;
                    }

                }

            }


            
    private   void  MyButton_MouseLeave( object  sender, EventArgs e)
            
    {
                MouseOverIsSend 
    = false;
            }

    把label的MouseEnter和PictureBox的MouseEnter事件都下拉,选择上面这个事件,这样,我们在设计器里面又能看到我们定义的事件罗!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值