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)
源码:
阅读(1983) | 评论(0) | 转发(0) |