VBA Outlook 2016 - 动态控件重叠
VBA Outlook 2016 - Dynamic controls overlap
我正在尝试向用户窗体中的不同框架添加动态控件。我正在使用 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")
然后我通过调用另一个我给出一些参数的子来设置属性:
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 属性 的另一个整数变量。每个用户都有自己的"Top value"。 OpBtn
是一个 MSForms.Control 变量。
我确定我的框架足够宽以容纳动态控件。
问题:
我的问题如下:有谁知道尽管我将它们的 .Top 和 .Left 属性 设置为不同,但为什么这些控件会重叠?
PS : 这是我第一次 post 来这里所以我希望我没有忘记任何东西。
编辑 1 :
我将 setControlProperties 中包含的代码放在
之后
Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1")
如建议的那样,但它仍然重叠。暂无进展。
编辑 2 :
我将 属性 GroupName 添加到我的 opBtn 控件中,现在一些控件有点超出了重叠范围。我现在确定这是一个重叠,但我仍然不明白为什么。
编辑 3 :
我在执行过程中使用 watch window 和 f8(逐行)来观察我的 opBtn.Left 和 opBtn.Top 的值。两者总是正确递增。我还尝试修改每个 OptionButton 对象属性,但我总是得到相同的结果。
编辑 4 :
我添加了一个名称并强制控件可见,但这没有效果。
Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1", "dynamicButton" & x, True)
.Top = 18 + (userNumber * 18)
我的 userNumber 变量已重置为 1,因此 .top 属性 始终具有相同的值。问题已解决:)
我正在尝试向用户窗体中的不同框架添加动态控件。我正在使用 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")
然后我通过调用另一个我给出一些参数的子来设置属性:
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 属性 的另一个整数变量。每个用户都有自己的"Top value"。 OpBtn
是一个 MSForms.Control 变量。
我确定我的框架足够宽以容纳动态控件。
问题: 我的问题如下:有谁知道尽管我将它们的 .Top 和 .Left 属性 设置为不同,但为什么这些控件会重叠?
PS : 这是我第一次 post 来这里所以我希望我没有忘记任何东西。
编辑 1 : 我将 setControlProperties 中包含的代码放在
之后Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1")
如建议的那样,但它仍然重叠。暂无进展。
编辑 2 : 我将 属性 GroupName 添加到我的 opBtn 控件中,现在一些控件有点超出了重叠范围。我现在确定这是一个重叠,但我仍然不明白为什么。
编辑 3 : 我在执行过程中使用 watch window 和 f8(逐行)来观察我的 opBtn.Left 和 opBtn.Top 的值。两者总是正确递增。我还尝试修改每个 OptionButton 对象属性,但我总是得到相同的结果。
编辑 4 : 我添加了一个名称并强制控件可见,但这没有效果。
Set opBtn = Me.Frame1.Controls.Add("Forms.OptionButton.1", "dynamicButton" & x, True)
.Top = 18 + (userNumber * 18)
我的 userNumber 变量已重置为 1,因此 .top 属性 始终具有相同的值。问题已解决:)