我正在尝试在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
有什么想法吗?
答案 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方法。这样我就不需要调用对象的排序了。