2012-03-27 103 views
0

我在Delphi XE2(WinXP Pro 32b下的Update 4)中遇到了SELECTNEXT和FINDNEXTCONTROL程序的下一个问题,这些程序无法正常工作。当控制获得焦点,我试图通过与下面的代码下一个控件,它不只是工作:关于Delphi XE2中的SelectNext程序

procedure TformMain.cbServicioKeyPress(Sender: TObject; var Key: Char); 
begin 
    if Key=#13 then 
    SelectNext(TWinControl(Sender), True, True); 
end; 

我已经审查了FINDNEXTCONTROL代码,我创建了一个相似的过程,我VE检测到的问题是,在这些线路:

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

+0

文件到QC的bug报告。 – 2012-03-27 08:10:08

回答

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