我遇到了一个问题,即使我花了很长时间试图这样做,我也无法解决。
我通常使用GridPanel来对齐表单上的控件。然而,它有一个恼人的错误。当GridPanel对齐模式是alClient并且我最大化其父窗口时,GridPanel会调整到该窗口的新大小,但是,放置在网格上的控件不会。他们保持与窗口调整大小之前相同的位置。 它仅在第一个窗口的最大化时发生。如果首先手动调整窗口大小,则每次都可以。我认为网格在第二次调整大小事件后调整其子控件(??)。
如果遇到这个错误,GridPanel可以正常工作吗?它可能足以向它发送消息(但是什么消息?),我不知道。我尝试使用Realign,Refresh等,但他们没有帮助。
提前感谢您的帮助,
马里乌什。
答案 0 :(得分:9)
答案 1 :(得分:3)
我发现了一个技巧。
在gridpanel父级的OnResize
事件中,将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;
答案 2 :(得分:3)
更改宽度/使控件无效对我不起作用(最近版本的RAD Studio更改了哪些内容?)。
无论如何,沿着这条线的类似简单的解决方法是:
procedure TForm1.FormResize(Sender: TObject);
begin
GridPanel1.ControlCollection.BeginUpdate;
GridPanel1.ControlCollection.EndUpdate;
end;
答案 3 :(得分:1)
我在几个项目中也遇到过这个错误。我不确定我是如何解决的(这是我以前的雇主的项目,我再也无法访问此源代码)。我想我已经重绘/刷新了放置GridPanel的父框架或表格。
答案 4 :(得分:0)
在调整大小调整GridPanel.Invalidate的大小。 我没有测试它。我希望它能起作用。