TCategoryPanel的TabOrder进入TCategoryPanelGroup

时间:2016-02-29 13:18:32

标签: delphi

我正在尝试在TCategoryPanelGroup中添加新的TCategoryPanel,但我无法订购TabOrder面板。我的代码是这样的:

function AddPanel (_AName, _ACaption: string): TCategoryPanel;
var
  ACategoryPanel: TCategoryPanel;

   ACategoryPanel: = TCategoryPanel (CategoryPanelGroup.CreatePanel (CategoryPanelGroup));
   ACategoryPanel.Name: = _AName;
   ACategoryPanel.Caption: = _ACaption;
   ACategoryPanel.Top: = 1000;

   Result: = ACategoryPanel;
end;

我多次调用此代码来添加一些面板。在阅读本主题后,我尝试将Top属性设置为高值:Order of TCategoryPanel into TCategoryPanelGroup

但这只能纠正我猜测的面板的可见顺序,我的问题在于TabOrder。

我做了这个测试:

  ACategory1 := AddPanel ('Category1', 'Category 1');
  ACategory2 := AddPanel ('Category2', 'Category 2');
  ACategory3 := AddPanel ('Category3', 'Category 3');

在屏幕上,订单将是:

  Category1
  Category2
  Category3

但TabOrder将是:

  Category1 = 2
  Category2 = 1
  Category3 = 0

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您必须设置TabOrder。例如:

ACategory1.TabOrder := 0;
ACategory2.TabOrder := 1;
ACategory3.TabOrder := 2;

答案 1 :(得分:-1)

我得到了我想从TCategoryPanelGroup创建一个继承的类:

TOrderedCategoryPanelGroup = class(TCategoryPanelGroup)
public
  procedure ReorderTabOrderByList;
end;

procedure TOrderedCategoryPanelGroup.ReorderTabOrderByList;
var
  i: Integer;
begin
  for i := 0 to Panels.Count - 1 do
  begin
    TWinControl(Panels[i]).TabOrder := i;
  end;
end;

使用这种方式:

procedure ProcessPanelGroup(CategoryPanelGroup: TOrderedCategoryPanelGroup);
begin
  CreatePanels(CategoryPanelGroup); //Create the PanelGroups
  CategoryPanelGroup.ReorderTabOrderByList;
end;

保持小组的排序的责任来自他的父母,应该如此。我不想控制只会给我更多工作的东西。通过这种方式,我可以设置标签顺序,而无需设置标签顺序"。

也许这可以继承TCategoryPanelGroup.CreatePanel方法。这样我就不需要调用对象的排序了。