用户形成VBA位置 - 向前和向后

问题描述 投票:0回答:3

是否有任何索引来控制哪个图片、文本框、框架...将在另一个之前?有没有类似 PHP 的 z-index 的属性?

我试图右键单击并向后发送,但我没有得到任何改变。

forms vba position
3个回答
2
投票

针对在 Excel 表单上将项目移动到前面或后面的这个老问题,我发现“向前移动”和“向后发送”控件不起作用。 我偶然发现,如果你删除Excel表单中的一个项目,然后取消删除它,它会将其移动到前面。


1
投票

经过相当多的搜索,您的问题的答案似乎是否定的。似乎没有任何方法可以调整 Zorder 或在 VBA 中使用“置于前面”或“发送到后面”。 根据这里的答案:

使用 Z 顺序和位置在 MS Access 中组织打开的表单

这里:

Microsoft Access z 索引属性

我发现提到的唯一替代方案是完美地分层控件并使用

.Setfocus
将它们带到前面。 就我个人而言,在我的数据库中,我只需将控件的
.Visible
切换为
False
True
,以给出控件“移动”的错觉。

注意: 查看您的标签后,我发现您那里没有 Excel 或 Access 标签。 我的答案基于Access,如果您使用的是excel,请调整您的标签。


0
投票

是的,您可以使用“

ZOrder
”以编程方式将用户窗体控件移动到前面或后面。

语法为:

MyUserForm.MyControl.ZOrder (zPosition)

fmTop
(或
0
)将其设置为顶部,在用户表单上的其他所有内容上可见:
MyUserForm.MyControl.ZOrder (fmTop)

MyUserForm.MyControl.ZOrder (0)

fmBottom
(或
1
)将其设置为底部,隐藏在用户窗体上的其他所有内容下方:
MyUserForm.MyControl.ZOrder (fmBottom)

MyUserForm.MyControl.ZOrder (1)

除了循环遍历相应的 UserFrom 控件并将它们放置之外,我不知道有任何方法可以在顶部和底部之间设置特定的可见性层(例如,在控件“X”上方,但在控件“Y”下方)一个叠在另一个之上,就像构建积木一样,类似于您不能将一个积木放在现有积木塔的中间。 您必须将块放在您想要的位置,然后添加其他块,一次一个,在放置块的上方或下方。

请注意,

fmTop
fmBottom
预设变量的功能与
vbYes
(
7
) 和
vbNo
(
6
) 预设变量类似,但相对于用户表单命名(表单:“
fm
”) "),而不是全局 VBA 应用程序(VBA:“
vb
”)。 对于 VBA 中的任何内容,您仍然可以将
fmTop
用作“0”,将
fmBottom
用作“1”,但给定索引中的“0”和“1”并不总是指该索引内的垂直放置。 只是在说'。 ;)

我不知道这是否是一个变化(考虑到这个问题几乎九年前就被问过,但目前有解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.