9

我们开发了一个软件。在这个软件中,我们根据不同的情况在不同的输入屏幕上显示和隐藏一些控件。

当我们隐藏一个控件时,会发生该控件占用的空间保持原样,并且布局有时看起来非常糟糕,尤其是。在具有大量控件的屏幕中。我们的客户不喜欢这样,并要求我们对此做点什么。

我的问题:是否有某种方法可以创建流体布局,以便在隐藏控件时,其余控件会自动调整自身以填充隐藏控件留下的空白空间,并且当控件显示时,它们应该自动让路用于控制并相应地调整自己。

我知道我们可以通过编码来实现这一点,但这需要在每个屏幕中使用大量代码来调整布局。我正在寻找可以减少每个屏幕编码的东西,因为有 80 多个屏幕。

请提出一些错误更少的方法,并且可以摆脱每个输入屏幕中不必要的编码。

4

5 回答 5

10

我认为您最好的选择是在运行时使用一个组件来处理您的表单上的 vcl 控件的布局(取决于您定义的条件)。我推荐你试试Devexpress ExpressLayout 控件

你可以在这里找到两个很棒的演示视频

替代文字
(来源:devexpress.com

您可以检查这些功能

自动管理- 控制组和单个控制元素由布局控件自动管理。您永远不用担心逐像素定位。

表单自动调整大小- 表单可以自动调整大小以最适合其内容。

再见。

于 2009-11-23T05:43:47.470 回答
4

现在,我不确定您的布局有多复杂,但我想您可以为此使用 TFlowPanel 和/或 TGridPanel。Flowpanel 可以很好地处理改变可见性的组件。我不确定gridpanel如何处理相同的...

于 2009-11-23T07:59:20.387 回答
1

你动态隐藏什么样的控件,自动填充空间是什么意思?

我不知道是不是这么简单:将控件放在面板上,然后使用 align alTop/alClient/alBottom。当您隐藏一个面板时,所有其他面板将自动向上移动。但是有一个问题:如果你想再次显示一个面板,面板的顺序有时会被搞砸......可以通过手动设置 .Top 属性来修复,或者通过设置 .Height := 1; 来“隐藏”。

于 2009-11-23T07:50:26.823 回答
0

我对复杂布局所做的实际上是将其拆分为几个选项卡。这有两个优点。它简化了表单布局,并允许您根据在其他选项卡中所做的选择来显示和隐藏整个选项卡。

于 2009-11-24T11:42:23.080 回答
0

Raize 组件有一个 TRzFlowPanel UI 组件。做你所追求的。

使用 TRzFlowPanel 在表单上放置一个空的流面板。传统面板和流程面板之间的主要区别在于控件的放置方式。使用传统面板,您可以将控件(例如按钮)放置在特定位置。您可以使用鼠标将该控件自由移动到面板内的任何位置。在流面板中,每个控件都放置在特定位置,无论您使用鼠标将其放置在何处。自动位置由 FlowStyle 属性控制。例如,使用 LeftRightTopBottom 的默认 FlowStyle 属性,您添加到流面板的第一个控件将捕捉到左上角。您添加的第二个控件紧挨第一个控件,依此类推。

于 2009-11-25T02:26:33.373 回答