如何将按钮动态添加到 TCategoryPanelGroup?

Posted

技术标签:

【中文标题】如何将按钮动态添加到 TCategoryPanelGroup?【英文标题】:How to dynamically add buttons to TCategoryPanelGroup? 【发布时间】:2010-11-23 09:03:03 【问题描述】:

有人使用过 Delphi 2009 的 TCategoryPanelGroup 组件,特别是动态添加按钮到类别面板的经验吗?

我无法让它正常工作。要么按钮没有出现,要么对齐被搞砸了。我想做什么的基本大纲:

procedure AddButton (const Caption, Group : String);
const 
  ButtonSize = 55;
  Border = 10;
var
  CategoryPanel : TCategoryPanel;
  Button : TButton;       
begin
  CategoryPanel := FindCategoryPanel (CategoryPanelGroup, Group);
  CategoryPanel.Height := CategoryPanel.Height + ButtonSize + Border;
  Button := TButton.Create (CategoryPanel);
  Button.Parent := CategoryPanel;
  Button.Width := ButtonSize;
  Button.Height := ButtonSize;
  Button.Left := 27;
  Button.Top := CategoryPanel.ClientHeight - Border - ButtonSize;
end;

有什么提示吗?

【问题讨论】:

【参考方案1】:

问题是我指定顶部坐标的方式。

我把它改成了类似的东西

ButtonCount := CategoryPanel.ComponentCount - 2;
Button.Top := Border + ButtonCount * (ButtonSize + Border);
CategoryPanel.ClientHeight := Border + (ButtonCount+1) * (ButtonSize + Border);

它有效。

不知道究竟是什么导致了问题。

【讨论】:

【参考方案2】:

究竟是什么问题?按钮准确显示在所需位置。

您确定要没有文字的方形按钮吗?

使用:

Button.Left := 0;
Button.Width := CategoryPanel.ClientWidth - 2;

使它们的精确宽度为面板减去一个像素的偏移量。

使用:

Button.Width := CategoryPanel.ClientWidth; Button.Left := -1;

创建最大宽度。它有 1 个像素的偏移量。

[[为了公平起见,我使用 2010 年]]。

【讨论】:

而且高度也有1个像素的偏移。 在实际应用中,按钮是 TButton 的子类,它们包含图像。 对于确切的问题:按钮没有出现在正确的位置。它们要么根本不出现,要么彼此重叠,只有很小的偏移量。 好的,我在 2010 年尝试使用普通的 TButton,它看起来还不错(关于 1 像素偏移)。能否在普通的 TPanel 上动态创建按钮? 现在无法尝试(无法访问 Delphi)...我将在星期一更新。感谢您的帮助。

以上是关于如何将按钮动态添加到 TCategoryPanelGroup?的主要内容,如果未能解决你的问题,请参考以下文章

如何动态地将按钮添加到视图以使布局宽度正常工作?

如何将按钮动态添加到我的表单中?

如何将命令绑定添加到动态按钮?

将 jQueryui 按钮添加到动态添加的内容

如何将纯 python 中动态创建的按钮添加到用 Kivy 语言编写的 kivy 布局中?

将按钮动态添加到垫表角材料