【问题标题】:About SelectNext procedure in Delphi XE2关于 Delphi XE2 中的 SelectNext 程序
【发布时间】: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


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

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多