【发布时间】:2018-05-11 11:47:45
【问题描述】:
我正在尝试将动态控件添加到用户窗体中的不同框架。我正在开发 Outlook 2016。
我希望它们在我拥有的每个用户的每一帧中按 3 行显示,然后在第一个用户的正下方显示另外 3 个,依此类推。 示例:
Frame1 Frame2
Label1 Label2 Label3 Label1 Label2 Label3
-user1 -user1 -user1 -user1 -user1 -user1
-user2 -user2 -user2 -user2 -user2 -user2
...
我现在得到的是https://imgur.com/a/FWtshTt
在我的例子中,这看起来像这样:
Frame1
Label1 Label2 Label3
-lastUserOfTheList -lastUserOfTheList -lastUserOfTheList
代码:
目前,我可以创建我的控件,但它们似乎都重叠,即使我正在设置它们的 Left 和 Top 属性。
我确实用这个设置了一个新控件:
Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1")
然后我通过调用另一个 sub 来设置属性,我给出了一些参数:
Call setControlProperties(userNumber, optionButtonCaption, opBtn, x)
这个子确实包含:
With opBtn
.Left = x * 36
.Top = 18 + (userNumber * 18)
.Caption = optionButtonCaption
.Height = 36
.Width = 48
.ZOrder (0)
End With
x 是一个整数变量,我用来增加 Left 属性,这样控件就不会重叠(但现在它们会重叠)。 userNumber 是我用来增加 Top 属性的另一个整数变量。每个用户都有自己的“最高价值”。 OpBtn 是一个 MSForms.Control 变量。
我确信我的框架足够宽,可以容纳动态控件。
问题: 我的问题如下:尽管我将它们的 .Top 和 .Left 属性设置为不同,但有谁知道为什么这些控件重叠?
PS:这是我在这里的第一篇文章,所以我希望我没有忘记任何事情。
编辑 1: 我将 setControlProperties 中包含的代码放在
之后Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1")
如建议的那样,但它仍然重叠。暂时没有进一步的进展。
编辑 2: 我将属性 GroupName 添加到我的 opBtn 控件,现在一些控件有点超出重叠。我现在确定这是重叠,但我仍然不知道为什么。
编辑 3: 我使用监视窗口和 f8(逐行)在执行期间观察我的 opBtn.Left 和 opBtn.Top 的值。两者总是正确递增。我还尝试修改每个 OptionButton 对象属性,但我总是得到相同的结果。
编辑 4: 我添加了一个名称并强制控件可见,但这没有效果。
Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1", "dynamicButton" & x, True)
【问题讨论】:
-
欢迎来到 Stack Overflow!也许屏幕截图可以帮助传达您的问题,包括图像上关于您想要的结果的注释(在循环的不止一次迭代中)。或者,可以帮助您找到问题的方法是逐步检查您的代码以查看您的哪些计算不正确。 (更多关于 here.)
-
我无法添加图片,因为我是新手,没有声誉。这是一个截图(imgur.com/a/FWtshTt),现在开始阅读你的链接。谢谢
-
把你的代码放在调用
setControlProperties的地方。 -
@MaciejLos 它仍然重叠,没有变化
标签: vba controls outlook-2016