7

我有一个问题,即使我花了很长时间试图解决它,我也无法解决。

我通常使用 GridPanels 来对齐表单上的控件。但是,它有一个烦人的错误。当 GridPanel 对齐模式为 alClient 并且我最大化其父窗口时,GridPanel 会调整到该窗口的新大小,但是,放置在网格上的控件不会。它们保持在窗口调整大小之前的相同位置。它仅在第一个窗口最大化时发生。如果首先手动调整窗口大小,则一切正常。我认为网格会在第二个调整大小事件(??)之后调整其子控件。

如果遇到此错误,该怎么做才能使 GridPanel 正常工作?向它发送消息可能就足够了(但是什么消息?),我不知道。我尝试使用 Realign、Refresh 等,但它们没有帮助。

提前感谢您的帮助,

马吕斯。

4

5 回答 5

9

啊,我也遇到过类似的问题。这可能与 VCL 中的调整大小问题有关。您可能想尝试Andreas Hausladen 的修复程序。在大多数情况下,它似乎对我有用。

于 2009-05-14T12:57:04.133 回答
4

更改宽度/使控件无效对我不起作用(最近版本的 RAD Studio 发生了一些变化?)。

无论如何,沿着这条线的类似,简单的解决方法是:

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.ControlCollection.BeginUpdate;
  GridPanel1.ControlCollection.EndUpdate;
end; 
于 2014-10-02T14:42:40.117 回答
3

我发现了一个窍门。

如果是OnResizegridpanel 的父级,则将 gridpanel 的宽度更改 1 个像素。

然后gridPanel会注意到大小发生了变化,然后重新排列gridpanel中的子控件..

样品在下面..

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.Width := GridPanel1.Width - 1;  // subtract 1
  GridPanel1.Width := GridPanel1.Width + 1;  // recover width by adding 1
end; 
于 2009-09-02T09:17:14.233 回答
1

在几个项目中,我也遇到过这个错误。我不确定我是如何解决这个问题的(这是我以前雇主的项目,我无法再访问这个源代码了)。我想我已经重绘/刷新了放置 GridPanel 的父框架或表单。

于 2009-05-14T11:36:26.340 回答
-1

在所有者调用 GridPanel.Invalidate 的大小调整上。我没有测试它。我希望它的工作。

于 2009-05-14T12:16:39.737 回答