关于Delphi XE2中的SelectNext过程

时间:2012-03-27 04:34:34

标签: delphi-xe2

我在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

1 个答案:

答案 0 :(得分:1)

procedure TfrmMain.ControlKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    SelectNext(ActiveControl, TRUE, TRUE);
    Key := #0;
  end;
end;