2012-03-27 105 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;