VBA Outlook 2016 - Динамическое управление перекрывается - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь добавить динамические элементы управления в разные кадры в пользовательской форме.Я работаю над 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.У каждого пользователя своя «Топ ценность».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)

1 Ответ

0 голосов
/ 15 мая 2018

.Top = 18 + (userNumber * 18)

Моя переменная userNumber была сброшена в 1, поэтому свойство .top всегда имело одно и то же значение.Проблема решена:)

...