我在Delphi XE2(WinXP Pro 32b下的Update 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 property是一个空字符串。
我开发了这段代码:
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
答案 0 :(得分:1)
procedure TfrmMain.ControlKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
SelectNext(ActiveControl, TRUE, TRUE);
Key := #0;
end;
end;