我有一个控件:来自TIimgBMEdit ,是从MastEdit继承下来的(控件集成了按钮功能),我在其它加了一个key属性。窗体分别用text属性显示客户名称,用key显示客户代码。当我点击按钮后,并把客户名称、客户代码分别写入text、key属性后,我希望如果在该控件上手动改动其text时也能校验其输入的准确性,这是否在该控件的OnExit事件中写代码? 如果这样做有个问题:当我点击工具栏上的保存按钮保存数据时,跳过了控件的ONExit事件。。请问各位大侠如何解决此问题???小弟在此先谢了
解决方案 »
- 主窗体新建一窗体的问题,创建后 焦点的问题
- 如何在一个字段中取自己想要的子字段!!求教各位大侠帮忙啦!
- 急聘delphi工程师(北京华鑫正泰软件技术有限公司)
- 求助:程序中如何实现访问网上邻居
- 100分求解:Delete提交时为何出错?
- 谁能教我制作DELPHI的安装程序。教材也行。
- selectDirectory怎样才能使目录浏览窗口居中?
- 在DBGrid中用鼠标中间的滚轮滚到界面最下时,如果让界面也跟着往下翻?
- 当对数据库进行录入的时候,怎么捕捉到自己声明的错误类型???UP 有分!
- delphi7 edit文本框鼠标左键不能点入 右键可以点入 这是为什么呀?
- 正常情况下,需要同时通过网络操作远端的数据库,但是网断的时候那,怎么才能不影响工作?
- 急!!!请问下面的C编写的DLL在DELPHI下如何调用!分不够再加
在保存那里校验,其实是完全合理的.这最保险.其实就一句话就OK.
MaskEdit.OnExit(nil);
你定义一个布尔变量bChanged,
在Edit.onChange事件中写入bChanged := True;
然后在校验过程中,或者在调用校验过程之前判断 if bChanged then ...
begin
if Edit1.Modified then
begin
...
if InputIsInvalid then
Edit1.Undo; //你还可以Undo哦
...
end;
end;
//判断某个对象是否具有某个属性
function HasProperty(AObject: TObject;
const APropName: string): boolean;
begin
Result := GetPropInfo(AObject.ClassInfo,APropName) <> nil;
end;function CheckData(uFrom: Tform): Boolean;
var
i : integer;
begin
result:=false;
for i:=0 to uFrom.ComponentCount -1 do
begin
if HasProperty(uFrom.Components[i],'ValueChanged') then
begin
if GetStrProp(uFrom.Components[i],'ValueChanged',false) then
begin
end;
end;
end;注意setstrprop等函数在TypInfo文件里,记得引用.其它数据类型的值的设定和获取函数也在这个文件里,自己可以查看。
procedure TForm1.FormCreate(Sender: TObject);
begin
TOld:=TstringList.Create;
TNew:=TstringList.Create;
TOld.Add('Edit1='+Edit1.Text);
TOld.Add('Edit2='+Edit2.Text);
TOld.Add('Edit3='+Edit3.Text);
//...Others
Tnew.Text:=Told.Text;
end;procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to TOld.Count-1 do
if TOld.Strings[i]<>Tnew.Strings[i]
then memo1.Lines.Add(TOld.Names[i]+'的内容被修改');
end;procedure TForm1.Edit1Change(Sender: TObject);
var i:integer;
s:string;
begin
if Sender is TEdit then s:=(Sender as TEdit).Text;
Tnew.Values[(Sender as Tcomponent).Name]:=s;
end;