C#数值编辑控件TNumEditBox(C# Numerical/Decimal Edit Control)

(原创文章,转载请注明来源:http://blog.csdn.net/hulihui)
  • 请到www.codeproject.com下载演示及源代码TNumEditBox
  • 更详细的技术说明也请浏览网页TNumEditBox
C#数值编辑控件TNumEditBox(C# Numerical/Decimal Edit Control)_第1张图片

   著名的Delphi开源控件包PBEditPack中的 PBNumEdit处理数值型数据效果较好,但没有提供相应的.NET或C#版。去年,在codeproject上找到一个.NET的数值型文本框开源控件 BANumEdit ,它支持CTRL+V/CTRL+C操作,代码短小精练,构思巧妙,但灵活度大不如PBNumEdit。

   笔者熟悉Delphi且感到PBNumEdit实在好用,于是决定将其源代码PBNumEdit.pas改编成C#版,核心思路如下:
  1. 由两个类组成:文本框TTextBoxEx从TextBox派生,用于设置只读时保持背景颜色,数值编辑框TNumEditBox从TTextBoxEx派生,用于处理数值数据;
  2. PBNumEdit没有重载ProcessCmdKey(Delphi中无该方法),在处理Ctrl+V/Ctrl+C/ShiftIns时存在一些Bug。于是借鉴BANumEdit的思路,重载该事件,完善键盘粘贴数据操作;
  3. Delphi有消息处理方法SendMessage,有鼠标操作方法WMPaste、WMCopy、WMCut,C#没有对应函数,但TextBox有WndProc事件(一般C#控件都有),利用该事件可以完成鼠标消息处理,也可以模拟SendMessage;
  4. Delphi的字符串下标为1,且TextBox控件SelStart、SelLength等属性、Copy等函数有自动纠错,例如:可以取负数而不报错,C#需要编程者注意;
  5. 程序主要处理键盘消息和鼠标消息,重载了:OnKeyUp、OnKeyPress、ProcessCmdKey、WndProc、OnLeave、OnReadOnlyChanged、OnBackColorChanged。
   控件TNumEditBox具有如下属性
  1. AllowNegative:是否允许录入负数
  2. DecimalLength:小数位长,为0时表示整数,最大取10位
  3. Value:直接取 Text 对应的 decimal 值
  4. IntValue:直接取 Text 对应的 int 值
  5. KeepBackColorWhenReadOnly:只读时可以保持背景颜色(TextBox没有该功能)
   为回报两个开源控件以及网www.codeproject.com给予笔者的许多帮助,TNumEditBox也做成开源控件,有兴趣者可以到开源网www.code.project下载 TNumEditBox。
   
    特别,该控件更详细的技术说明也请浏览codeproject上的相关说明。由于时间仓促,测试没有面面俱到,欢迎使用者提出意见和建议,笔者将继续完善TNumEditBox。
修改于2008年9月30日


你可能感兴趣的:(编程,.net,C#,测试,Delphi,textbox)