Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101054
  • 博文数量: 16
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-15 18:51
个人简介

Software

文章分类

全部博文(16)

文章存档

2012年(1)

2011年(1)

2010年(2)

2009年(1)

2008年(6)

2007年(5)

我的朋友

分类: C/C++

2008-06-11 01:06:49

Visual C/C++ 的 Validation是很好用的功能。wxWidgets也有类似的功能,wxTextValidator。
不过当我在使用它时,会有一些问题,如无故的操作不正常,原因不详。
 
为了解决这个问题,又得要自己编写一个自己的Validator了。
 
这个Validator有两个部分:CValObj与CValidator。
CValObj是validation的一个单位。CValidator是CValObj的在一个Dialog或Frame里的总管理(其实是一个array of object,方便于处理所有的CValObj)。
 
CValObj试用于int,long,float,double与wxStrng字串的data type。有检查最大、最小值与字串的长度。另外加ToolTip的显示。比没有什么特别的技巧了。
 
用法简单:
可以在局部(local)或全局(global)里宣示(declare)。最方便的用法就是一个窗口Frame,对话匡dialog,一个CValidator。因为当这个局部或全局的窗口在毁灭时,CValidator也会自动的自我释放资源。
 
我这个例子有两个窗口,Frame与Dialog。
首先在头文件里定义一个CValidator为子成员。如:
ValidMain.H 与 NewDialog.H 里的 CValidator m_Validator。
 
然后:
在窗口的初始化时,把相关的接空件与变量连接起来。
m_Validator.Add(new CValObj(TextCtrl1,&inum,0,100));
TextCtrl1=控件
inum=变量
0-100,最小与最大直。
 
最后在你想要读取这些控件时调用TransferFromWindow(),如:
if (m_Validator.TransferFromWindow())  //if valid, proceed
{
  wxString tmpstr;
  tmpstr.Printf(_("%d"),inum);
  TextCtrl4->SetValue(tmpstr);
  tmpstr.Printf(_("%f"),fnum);
  TextCtrl5->SetValue(tmpstr);
  TextCtrl6->SetValue(str);
}
 
 
注:
TransferFromWindow() -〉VC++ 的 UpdateDate(TRUE)
TransferToWindow()   -〉VC++ 的 UpdateDate(FALSE)
 
源码:
阅读(1948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~