【发布时间】:2012-03-27 04:34:33
【问题描述】:
我在 Delphi XE2(WinXP Pro 32b 下的更新 4)中遇到了 SELECTNEXT 和 FINDNEXTCONTROL 程序的下一个问题,这些程序不能正常工作。当一个控件获得焦点并且我尝试使用下面的代码传递给下一个控件时,它不会简单地工作:
procedure TformMain.cbServicioKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
SelectNext(TWinControl(Sender), True, True);
end;
我查看了 FINDNEXTCONTROL 的代码并创建了一个类似的程序,我发现问题出在以下几行:
function TWinControl.FindNextControl(CurControl: TWinControl;
GoForward, CheckTabStop, CheckParent: Boolean): TWinControl;
...........
GetTabOrderList(List);
if List.Count > 0 then
begin
StartIndex := List.IndexOf(CurControl);
...........
end;
由于任何奇怪的原因,过程 GETTABORDERLIST 给出了一个具有有效引用的列表,除了当前的焦点控件之外,它确实 LIST.INDEXOF 返回 -1,并且当前控件焦点在 LIST 对象中的位置被另一个对象的 NAME属性是一个空字符串。
我开发了这段代码:
procedure TformMain.GoNextControl(T: TWinControl; CheckTabStop: Boolean);
var
vParent, vNextChild : TWinControl;
List : TList;
CurIndex, i : Integer;
S:String;
begin
vParent:= Self; //T.Parent;
vNextChild:= nil;
List:= TList.Create;
try
vParent.GetTabOrderList(List);
if List.Count > 0 then
begin
//CurIndex:= List.IndexOf(T);
CurIndex:= -1;
for i:= 0 to List.Count-1 do begin
S:= TWinControl(List[i]).Name;
if S = EmptyStr then
begin
CurIndex:= i;
Break;
end;
end;
...........................
有人对此异常有响应或更好的解决方案吗?提前致谢。
d
【问题讨论】:
-
向 QC 提交错误报告。
标签: delphi-xe2