gpt4 book ai didi

delphi - 使用RTTI设置组件焦点

转载 作者:行者123 更新时间:2023-12-03 19:37:09 27 4
gpt4 key购买 nike

是否可以通过Rtti到达任何控件Focus属性?我想要的是如果控件为Empty,则将其值设置为True。
任何帮助将不胜感激。

procedure SetFirstEmptyCtrlFocused;

function HasTextProp(aControl: TControl): Boolean;
var
Ctx: TRttiContext;
Prop: TRttiProperty;
begin
Prop := lCtx.GetType(aControl.ClassType).GetProperty('Text');
Result := (Prop <> nil) and (Prop.Visibility in [mvPublic, mvPublished])
and (Prop.GetValue(aControl).ToString = '');
end;

var
ObjList: TObjectList<TControl>;
objIdx: Integer;
Ctrl: TControl;

begin
ObjList := TObjectList<TControl>.Create;
ObjList.Add(cxTextEdit1);
ObjList.Add(cxDateEdit1);
ObjList.Add(cxTextEdit2);

for objIdx := 0 to lObjList.Count -1 do
begin
Ctrl := lObjList.Items[objIdx];

if HasTextProp(lCtrl) then
begin
SetCtrlFocused //...??
Break;
end;
end;
end;

最佳答案

不是每个TControl都能获得焦点,只有TWinControl可以。因此,请使用TWinControl而不是TControl并使用其方法SetFocus:

procedure SetFirstEmptyWinCtrlFocused;

function HasTextProp(aControl: TWinControl): Boolean;
var
Ctx: TRttiContext;
Prop: TRttiProperty;
begin
Prop := Ctx.GetType(aControl.ClassType).GetProperty('Text');
Result := (Prop <> nil) and (Prop.Visibility in [mvPublic, mvPublished])
and (Prop.GetValue(aControl).ToString = '');
end;

var
ObjList: TObjectList<TWinControl>;
objIdx: Integer;
Ctrl: TWinControl;

begin
ObjList := TObjectList<TWinControl>.Create;
ObjList.Add(cxTextEdit1);
ObjList.Add(cxDateEdit1);
ObjList.Add(cxTextEdit2);

for objIdx := 0 to lObjList.Count -1 do
begin
Ctrl := lObjList.Items[objIdx];

if HasTextProp(Ctrl) then
begin
Ctrl.SetFocus;
Break;
end;
end;
end;

关于delphi - 使用RTTI设置组件焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48607201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com