现在的位置: 首页 > 综合 > 正文

自定义控件——数字输入文本框

2012年05月04日 ⁄ 综合 ⁄ 共 2837字 ⁄ 字号 评论关闭

        该控件源代码来自于《C#应用程序开发全程演练》,由于书上的源代码没地方下载,我就自己把它敲进去了。

源代码
生成的dll文件

         要生成一个用户自定义的控件,首先新建一个类库(class library)项目,然后添加相应的引用。在这里添加System.Windows.Forms——因为我们设计的是一个窗体控件,System.Runtime.InteropServices——用到了DllImport属性,System.ComponentModel、System.Windows.Forms.Design——需要更改设计时的属性。

          然后代码如下:

 

 1//在项目中选添加引用,添加System.Windows.Forms才能添加using
 2using System.ComponentModel;
 3using System.Windows.Forms;
 4//在项目中添加对System.Design的引用
 5using System.Windows.Forms.Design;
 6using System.Runtime.InteropServices;
 7
 8namespace CustomControls
 9{
10    /// <summary>
11    /// 该文本框限制用户只能输入数字或小数点
12    /// </summary>

13    //添加Designer属性,使这个内部类成为设计时的属性表示类
14    [Designer(typeof(NumbersOnlyTextBox.NumbersOnlyTextBoxDesigner))]
15    public class NumbersOnlyTextBox:System.Windows.Forms.TextBox
16    {
17        
18        #region Static Fields
19    
20        //从user32.dll中引入MessageBeep函数
21        [DllImport("user32.dll")]
22        private static extern bool MessageBeep(uint uType);
23
24        #endregion

25
26        #region Method Overrides
27
28        //重载ProcessKeyEventArgs处理用户按键
29        protected override bool ProcessKeyEventArgs(ref Message m)
30        {
31            int keyValue=m.WParam.ToInt32();
32            //(keyValue>47&&keyValue<58) - Number 0-9
33            //keyValue==46 - Decimal point
34            //(keyValue>34&&keyValue<41) - Home,End,and Arrow Keys
35            //keyValue==8 - Backspace Key
36            if((keyValue>47&&keyValue<58)||keyValue==46||
37                (keyValue>34&&keyValue<41)||keyValue==8)
38            {
39                return base.ProcessKeyEventArgs(ref m);
40            }

41            else
42            {
43                //Delete Key
44                if(m.Msg==256&&keyValue==46)
45                {
46                    return base.ProcessKeyEventArgs(ref m);
47                }

48                //Windows message id used to llimit 1 beep per keystroke
49                if(m.Msg==258)
50                {
51                    MessageBeep(0);
52                }

53                return true;
54            }

55        }

56
57        #endregion

58
59        #region Internal Classes
60
61        /// <summary>
62        /// 设计时显示该控件的属性
63        /// </summary>

64        internal class NumbersOnlyTextBoxDesigner:ControlDesigner
65        {
66            #region Method Overrides
67            //从属性窗口中移除text属性
68            protected override void PostFilterProperties(System.Collections.IDictionary properties)
69            {
70                properties.Remove("Text");
71            }

72            #endregion

73        }

74        #endregion

75    }

76}

        把项目Build一遍,就生成了一个dll文件,这个就可以供我们以后使用了。

        使用自定义控件的时候,可以在右侧的工具箱里添加一个选项卡(右键点击,选择就行了),我取名为自定义控件,用来放置以后设计的自定义控件,然后添加/移除项——》浏览找到刚才生成的dll文件,确定后就可以把它添加到项目里了。

        作一个自定义控件其实不是件很复杂的事,生成的控件还可以供以后复用,何乐而不为呢?

 

抱歉!评论已关闭.