不同标签停靠方向MultiPage控件内命令按钮的右下角对齐
VBA UserForm MultiPage 内按钮对齐实现
开发场景说明
- 窗体中创建了两个尺寸完全相同的MultiPage控件,每个控件上各放置1个CommandButton
- 两个MultiPage的标签停靠方向不同:MultiPage1的标签靠左显示,MultiPage2的标签靠上显示
- 实际需求:将两个CommandButton分别精准对齐到所属MultiPage控件的内容区右下角
原有实现代码
最初编写的窗体初始化对齐逻辑如下:
Private Sub UserForm_Initialize() 'align buttons to bottom right CommandButton1.Left = MultiPage1.Width - CommandButton1.Width CommandButton1.Top = MultiPage1.Height - CommandButton1.Height CommandButton2.Left = MultiPage2.Width - CommandButton2.Width CommandButton2.Top = MultiPage2.Height - CommandButton2.Height End Sub
代码问题说明
MultiPage的Width、Height属性统计的是控件整体外轮廓的总尺寸,没有扣除不同停靠方向下标签栏占用的空间:
- 标签靠左停靠时,左侧标签栏会挤占横向可用宽度,实际可放置内部控件的内容区宽度小于MultiPage总宽度
- 标签靠上停靠时,顶部标签栏会挤占纵向可用高度,实际可放置内部控件的内容区高度小于MultiPage总高度
直接用总尺寸计算按钮位置,会出现按钮被标签栏遮挡、对齐位置偏移的问题,无法满足精准对齐的要求。
修正后的可正常运行的代码
MultiPage自带InsideWidth、InsideHeight属性,可直接返回内容显示区的实际可用尺寸(已自动扣除标签栏占用空间),且MultiPage内部子控件的Left、Top坐标本身就是相对于内容区左上角计算的,直接用这两个属性计算按钮位置即可适配所有标签停靠方向:
Private Sub UserForm_Initialize() ' 对齐按钮到所属MultiPage内容区的右下角 CommandButton1.Left = MultiPage1.InsideWidth - CommandButton1.Width CommandButton1.Top = MultiPage1.InsideHeight - CommandButton1.Height CommandButton2.Left = MultiPage2.InsideWidth - CommandButton2.Width CommandButton2.Top = MultiPage2.InsideHeight - CommandButton2.Height End Sub
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

