为什么我的TSplitter在错误的地方?

Mas*_*ler 5 delphi user-interface splitter

我有一个对话框,其中列出了这样的内容:

---------------------------------------------
|                                           |
| CONFIG AREA                               |
| Align: alTop                              |
--------------------------------------------- <-static boundary
|                                           |
| DISPLAY AREA 1                            |
| Align: alTop                              |
============================================= <-TSplitter Align: alTop
|                                           |
| DISPLAY AREA 2                            |
| align: alClient                           |
--------------------------------------------- <-bottom of dialog
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,分割器不会显示在显示区域1和显示区域2之间,而是显示在配置区域和显示区域1之间,从而导致一些恼人的接口问题.表单中与设置相关的事件处理程序中没有任何内容可以改变任何这些组件的Visible或Align属性.有谁知道为什么分割器没有加载到它在表单设计器中的位置?

And*_*and 11

(无法重现.)分路器很棘手.我总是编写代码来定位它们.在这种情况下,我会这样做

procedure Form1Show(Sender: TObject);
begin
  Splitter1.Top := DisplayArea2.Top;
end;
Run Code Online (Sandbox Code Playgroud)

  • 选择这个而不是Gamecat的解决方案,因为在FormShow中使用显式代码使得在未来的某个时候在表单设计器中查找错误的东西的人不太可能做某种事情,以某种方式打破他的解决方案所依赖的脆弱的创建顺序. (4认同)

Too*_*the 7

我过去也遇到过类似的问题.他们的原因是:

  1. 控制隐形的地方.
  2. 控制创建顺序.

我认为分割器是在配置区域之后和显示区域1之前创建的.如果你在显示区域1之后创建它应该没问题.


Jos*_*tos 6

我过去也遇到过同样的问题.TSplitter应放在两个TPanel之间,如:

+---------------------------------------------+
|+-------------------------------------------+|
||                                           ||
|| CONFIG AREA                               ||
|| Align: alTop                              ||
|+-------------------------------------------+|
||                                           ||
|| DISPLAY AREA 1                            ||
|| Align: alClient                           ||
|+-------------------------------------------+|
+---------------------------------------------+
=============================================== <-TSplitter Align: alTop
|                                             |
| DISPLAY AREA 2                              |
| align: alClient                             |
----------------------------------------------- <-bottom of dialog
Run Code Online (Sandbox Code Playgroud)

配置区域和显示区域1现在应该包含在具有Align:= alTop的TPanel内,并且配置区域或显示区域1应该与alClient对齐.

希望这可以帮助