常用规范和实现方法
界面尺寸调整
手动调整控件尺寸和位置
一个程序中所有相同类型的控件都应当尽量保持一致的风格和统一的大小。尤其是在同一界面上的一组相同的控件,更应当保持一致。
下图是一个 VI 的前面板,在这个界面上放置了一组按钮。为了保持界面的整洁,这组按钮应当大小统一,排列整齐,并使用相同的字体。

LabVIEW 提供了几个用来整理界面控件位置和大小的工具,这几个工具在编辑界面时是经常要用到的。它们位于 VI 的工具条上,分别称之为 "文本设置"、"对齐对象"、"分布对象"、"调整对象大小"。上图列出了这几个工具按钮的主要功能。字体调整按钮用于修改界面上文本的字体、大小、颜色、对齐方式等。字体设置按钮右侧的四个下拉菜单工具是排版界面的核心,它们分别是:
- 对齐对象 (Align Objects): 将选中的多个控件按左、右、顶、底或中心线对齐。
- 分布对象 (Distribute Objects): 调整选中控件之间的相对位置,使其等间距排列(可按边缘或中心分布),或消除间距。
- 调整对象大小 (Resize Objects): 将选中的多个控件统一调整为相同宽度、高度或最大/最小尺寸。
- 重新排序 (Reorder): 当控件发生重叠时,调整它们在 Z 轴上的层级(置于顶层、移至底层等)。
我们首先要把界面上的按钮调整成同样的大小。先选中所有的控件,然后根据需要点击 "调整对象大小" 工具栏的相应按钮。如按 "最大宽度" 按钮,则所有的控件都被设置为与最宽的控件相同的宽度:

也可以选中全部控件后,使用 "设置宽度和高度" 按钮。点击这个按钮后,会弹出一个对话框,设置控件长宽的具体数值:

VI 工具条上其它几个工具的使用方法与调整控件大小按钮的使用方法类似,就不重复解释了。
利用调整控件位置和间距的工具,以及字体调整工具,把控件排列整齐。排列整齐的界面看上去就顺眼多了:

设计可调节大小的程序界面
程序的界面应该有多大呢?如果程序可能会被多个用户使用,就难免会运行在各种分辨率的屏幕上。如果界面太大,低分辨率的显示屏就无法完全显示;如果界面太小,对于高分辨率显示屏来说又是一种浪费。从用户的角度考虑,程序的界面尺寸最好是可调的,用户可以选择适合计算机屏幕的任意大小的界面。为了界面显示的协调,程序界面尺寸发生变化时,界面上的控件各自的大小和位置也必须随之调整。
控件跟随界面大小变化有两种方式。一种是控件大小也需要跟随调整的:一些显示数据量较大的控件,比如波形显示控件、表格、大文本框等,通常是界面的主要控件,需要随之调整尺寸以获得尽量大的显示区域;而有些控件的尺寸可以是固定的,比如按钮,选择框等控件。界面尺寸变化时,虽然不需要调整尺寸,但它们的位置可能需要调整,以获得最佳的界面布局。
窗格和分隔栏
一般来说,每个 VI 有一个前面板(Panel),每个前面板又可以是由多个窗格(Pane)组成的。默认情况下,新建一个 VI,这个 VI 的前面板是由单个窗格组成的。由于大多数情况,每个面板只有一个窗格,也往往就忽略了窗格的存在。但是在编程时,一定要意识到:LabVIEW 程序中的控件是摆放在窗格上,而不是前面板上的;窗格才是摆放在前面板上的。
使用分隔栏可以在前面板上分割出更多的窗格来。分隔栏在控件选板 "[xx 风格] -> 容器" 中。分隔栏有横、竖之分,可以把前面板按照不同的方向分成两块。控件无论被放在哪个窗格里,只是界面的外观不同,对程序功能都没有影响。
当前面板的大小改变时,分隔栏也可以跟随着移动。在分隔栏的鼠标右键菜单中有一项 "调整分隔栏",可以用来设置跟随面板的哪个边沿一起移动,或是按比例移动:

分隔栏的右键菜单最后两项“左窗格”“右窗格”(或“上窗格”“下窗格”),用来设置分隔栏两侧窗格的一些属性。比如,界面划分成窗格后通常不需要显示窗格内的拖动条,可以在子菜单中禁止其显示。
分隔栏的属性也可以在运行状态下通过程序来设置。在程序框图上分隔栏虽然没有控件那样的接线端,但可以使用右键菜单创建它的引用、属性节点和调用节点,并且在程序中使用它的属性以及方法。比如小图中的程序就是从左到右挪动上图中的位置。
在程序运行时,用户仍然可以在界面上移动分隔栏。若不希望用户改变分隔栏位置,可以在分隔栏的右键菜单中选中 "锁定",这样,分隔栏的位置就被锁定了。
分隔栏没有隐藏属性。若希望程序运行时看不到分隔栏,可以通过改变分隔栏颜色来达到隐藏的目的。首先,把分隔栏的风格改为 "经典",然后把它的颜色染成与程序框图相同,程序运行时就看不到分隔栏了。顺便提一句,分隔栏两侧的窗格是可以有不同背景色的。
窗格也是没有隐藏属性的。若在程序运行时需要隐藏某个窗格,可以调整它周围分隔栏的位置,让这个窗格缩起来就行了。
编程调整控件的位置尺寸等属性
如果需要在程序运行时调整界面尺寸,一个有效的方法是动态调整控件的尺寸与位置。当程序接收到 "窗格大小" 这一事件后,根据新的界面的尺寸,重新计算每个控件的位置和大小。
比如下图所示的程序界面包含一个波形图控件和一个停止按钮:

当用户改变界面尺寸时,希望停止按钮始终停靠在界面右下角,而波形图控件则撑满剩下的界面空间。这些变化都可以通过编程来设置,示例程序如下:

每当界面尺寸发生变化,程序就重新读取界面当前的宽度和高度,再根据这两个数值计算每个控件应当所在的位置和大小。上图中的程序,调整界面布局的代码被放在了一个 "调整控件尺寸" 的用户事件分支中,而不是直接在 "窗格大小" 这一事件分支中处理,这是因为程序可能有多处需要调整界面布局,比如程序在初始化和 "窗格大小" 事件发生时都需要调整界面布局。解决办法就是:把调整界面布局的代码被放在 "调整控件尺寸" 的用户事件分支中,而当程序初始化和 "窗格大小" 事件发生时,都抛出一个 "调整控件尺寸" 事件,程序便跳转到这一分支来调整界面布局了。这样避免了程序在多处使用同样的调整界面布局代码。
使用编程的方法调整控件布局,使其符合变化的界面尺寸,其优点是调整精确稳定。有些控件,比如仪表盘控件,只能通过这种编程的方式才能准确调整其大小。编程方法的缺点是调整较为繁琐。对于比较简单的界面,可以考虑使用分隔栏帮助界面布局,省去编程的繁琐。
等比例改变所有控件的尺寸
如果程序的界面很简单,只包含一个窗格,则可以在 VI 属性中设置 "按窗口大小缩放所有控件尺寸"。这样,当界面尺寸变化时,界面所有的控件都将按相应的比例调整自身大小:

这样设置之后,效果是整个界面按比例缩放,所有的控件都一起变化。但是,这样的缩放并不太精确。反复多次调整界面尺寸后,假如界面再回复到原始的大小,会发现有些控件尺寸可能有少许改变。这是因为前面板的尺寸和控件的尺寸都只能是整数,这样每次调整界面后,控件与前面板尺寸的比例都会有所变化。也就是说每次界面调整都会引入误差,误差累积后可能会比较明显。
仅改变一个主控件的尺寸
在大多数的程序界面上,往往只需要有一个能够缩放的控件撑满屏幕就可以了。其它的控件没有必要调整大小,只要它们的布局整齐不乱就行。
比如对于只包含有一个波形图控件和一个停止按钮控件组成的界面,它只需要波形图随界面尺寸的调整而变化。那么只要在这个控件右键菜单中选中它的 "随窗格缩放" 属性就可以了。但每个界面窗格只允许有一组控件被设置成 "随窗格缩放"。
被设置成这一属性的控件四个边缘的延长线都被深色标注出来了。当界面尺寸被调整时,四条深色直线到其最近的 VI 前面板的边缘的距离是不变的,只有被这个四条深色直线包裹出来的矩形区域的尺寸会随界面一起变化。这样一来,可以保证程序的主控件随界面尺寸变化,而其它的控件位置保持稳定。

若主控件有多个,比如说界面上有两个同等重要的波形控件,那么只要把两个主控件组成一组。由多个控件绑成的组,在外观布局上的行为属性与单个的控件是类似的。把这个组设置为 "随窗格缩放",这一组的控件就可以一起随界面尺寸变化了。

当界面尺寸发生变化时,上图所示的 "开始" 和 "停止" 按钮之间的距离也会变动,因为它们一个靠近边界线左端,另一个靠近右端。若需要这两个按钮的相对距离保持不变,也把它们绑成一组就可以了。
借助分隔栏调整控件的位置与尺寸
对于比较复杂的界面,同样也可以仅仅借助于分隔栏调整控件的尺寸和位置。用下图这样一个比较复杂的界面为例:

这个界面包含五个控件,假设界面要求如下:水箱、油箱、波形图三个控件需按比例随界面尺寸调整,但它们三个控件之间的距离,以及它们距离界面边框的距离不能变化;信息框的长度随界 面调整,但高度不变;停止按钮尺寸保持不变,且始终在界面右下角。
可以使用分隔栏来定位每个控件的位置。为了方便在编辑时调整控件尺寸,以及确保控件尺寸和位置在多次调整界面大小后仍然准确,可以设置较多的分隔栏。原则是让每个需调整尺寸的控件都有一个可以撑满的窗格。 之后,在控件的右键菜单中选择 "将控件匹配窗格",让它们的尺寸始终与窗格保持一致。

水箱、油箱、波形图、信息四个控件都需要设置为撑满窗格,而停止按钮由于大小不变,不需要有此设置。
这个例子是比较极端的情况,一般来说并不需要设置这么多的分隔栏,只要能保持每个窗格内只有一个跟随界面调整的控件就可以了。
界面上各个控件变化方式不同,全在于分隔栏对齐方式的设置。下图显示了分隔栏对齐方式的设置:

实际上,用户不会希望在界面上把分隔栏显示出来,可以参考窗格和分隔栏这段介绍的方法将其隐藏。
程序调节界面尺寸的一些注意事项
- 有些控件 不能改变尺寸 LabVIEW 中并非所有的控件都可以调整其大小。大多数尺寸固定的控件都是用来给子 VI 输入输出参数的,不会用到用户界面上。但也有一些会用于界面,尤其是一些系统风格的控件,比如下图中的单选框、复选框控件等。
- 有些控件必须保持长宽比 大多数 LabVIEW 控件可以分别设置它们的高度和宽度。但有一些控件,比如下图中的仪表盘、旋钮等,它们的形状是固定的,只能是正圆。也就是无论大小如何,长宽始终保持 1:1。
对于这样的控件是不能使用 "根据窗格缩放对象"、"将控件匹配窗格" 的,LabVIEW 对于这类控件大小的自动调整并不准确。对于它们,只能使用编程的方式调整尺寸。
- 界面最小尺寸 无论采用哪种方式调整界面布局,最好都为界面设置一个最小尺寸。因为任何控件都不可能无限小,所以整个界面缩得太小对于用户也是没有意义的。VI 前面板的最小尺寸也就是程序界面的最小尺寸,这一设置可以在 VI 的属性对话框中找到:

避免过度使用分隔栏
虽然理论上我们可以,用横竖交错的分隔栏把界面切成无数个窗格,以实现每个控件完美的自适应缩放,但强烈不建议在复杂的生产级软件中这样做。因为这种做法会导致极高的维护成本:一旦需要添加一个新控件或调整布局,可能需要推翻所有的分隔栏重新设置;此外,隐藏的透明分隔栏会让后续接手的开发者完全摸不着头脑。
最佳实践:
- 局部自适应: 界面上只允许 1 到 2 个主要控件(如核心波形图或大数据表格)设置为“随窗格缩放”。
- 固定布局 + 分页: 对于包含大量参数设置、按钮的复杂界面,通常禁用窗口的用户缩放功能,确保在最低目标分辨率下能完整显示。如果内容太多,使用选项卡 (Tab Control) 或子面板 (SubPanel) 进行内容分页,而不是强求所有东西挤在一个可缩放的屏幕上。