delphi – 如何循环一个类中的所有属性
发布时间:2020-12-15 03:56:03 所属栏目:大数据 来源:网络整理
导读:我在我的Delphi应用程序中有一个类,我想要一个简单而动态的方式将所有的字符串属性重置为”,所有布尔属性为False 就我在网络上可以看到,应该可以做一些循环,但是如何做到这一点我不清楚. 解决方法 请注意,以下代码仅适用于已发布的类的属性!此外,传递给下面
我在我的Delphi应用程序中有一个类,我想要一个简单而动态的方式将所有的字符串属性重置为”,所有布尔属性为False
就我在网络上可以看到,应该可以做一些循环,但是如何做到这一点我不清楚. 解决方法
请注意,以下代码仅适用于已发布的类的属性!此外,传递给下面的函数的类的实例至少必须已经定义了发布的部分!
以下是使用旧样式RTTI将已发布的字符串属性值设置为空字符串,将布尔值设置为False. 如果您的Delphi比Delphi 2009更旧,您可能会丢失tkUString类型.如果是这样,请从以下代码中删除: uses TypInfo; procedure ResetPropertyValues(const AObject: TObject); var PropIndex: Integer; PropCount: Integer; PropList: PPropList; PropInfo: PPropInfo; const TypeKinds: TTypeKinds = [tkEnumeration,tkString,tkLString,tkWString,tkUString]; begin PropCount := GetPropList(AObject.ClassInfo,TypeKinds,nil); GetMem(PropList,PropCount * SizeOf(PPropInfo)); try GetPropList(AObject.ClassInfo,PropList); for PropIndex := 0 to PropCount - 1 do begin PropInfo := PropList^[PropIndex]; if Assigned(PropInfo^.SetProc) then case PropInfo^.PropType^.Kind of tkString,tkUString,tkWString: SetStrProp(AObject,PropInfo,''); tkEnumeration: if GetTypeData(PropInfo^.PropType^)^.BaseType^ = TypeInfo(Boolean) then SetOrdProp(AObject,0); end; end; finally FreeMem(PropList); end; end; 这是一个简单的测试代码(注意属性必须发布;如果类中没有已发布的属性,至少空的发布部分必须在那里): type TSampleClass = class(TObject) private FStringProp: string; FBooleanProp: Boolean; published property StringProp: string read FStringProp write FStringProp; property BooleanProp: Boolean read FBooleanProp write FBooleanProp; end; procedure TForm1.Button1Click(Sender: TObject); var SampleClass: TSampleClass; begin SampleClass := TSampleClass.Create; try SampleClass.StringProp := 'This must be cleared'; SampleClass.BooleanProp := True; ResetPropertyValues(SampleClass); ShowMessage('StringProp = ' + SampleClass.StringProp + sLineBreak + 'BooleanProp = ' + BoolToStr(SampleClass.BooleanProp)); finally SampleClass.Free; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |