Захват изображения внутри этикетки

У меня есть пользовательская форма, состоящая из нескольких кнопок с изображениями. Затем у меня есть три пустых метки, которые мне нужны, когда я нажимаю кнопку/изображение, изображение появляется на первой метке. Затем, если я нажму на другую кнопку/изображение, вторая метка будет изображением и то же самое для третьего.

36 кнопок с метками от btn1 до btn36 Три пустые метки с названиями захват1 захват2 захват3

Я не уверен, нужно ли мне публиковать какую-либо другую информацию или нет.

Мне нужна помощь в написании кода для этого (VBA)


person Mike    schedule 08.04.2011    source источник


Ответы (1)


Основы переноса изображения с кнопки на ярлык просты:

Capture1.Picture = btn1.picture

Настоящая головная боль возникает из-за того, что вы не можете назначить один и тот же фрагмент кода нескольким событиям Button.Click в VBA. Не так, как в VB, где синтаксис был бы таким:

Sub MyRoutine(sender, <args>) Handles Button1.Click, Button2.Click...

В VBA вам в основном нужно 36 различных подпрограмм _Click, по 1 для каждой кнопки. Настройте счетчик уровня модуля, чтобы отслеживать, на какую метку вы хотите ссылаться.

Dim counter As Integer

Private Sub UserForm_Activate()
    counter = 1
End Sub

Private Sub btn1_Click()
   If counter > 3 Then
      counter = 1
    End If
    Controls("capture" & counter).Picture = btn1.Picture
    counter = counter + 1
End Sub

Вам понадобится 36 подпрограмм, идентичных этой, за исключением названия кнопки в каждой подпрограмме. К счастью, вы можете сделать это в основном с помощью вырезания и вставки.

Вы можете сэкономить несколько строк кода, если сделаете это следующим образом:

Private Sub btn1_Click()
   Call CaptureImage(btn1.Name)
End Sub

Private Sub btn2_Click()
   Call CaptureImage(btn2.Name)
End Sub
.
.
.
Private Sub CaptureImage(ByVal btnName As String)
    If counter > 3 Then
      counter = 1
    End If
    Controls("capture" & counter).Picture = Controls(btnName).Picture
    counter = counter + 1
End Sub

но вы все равно получите 36 подпрограмм _Click, которые вызывают подпрограмму CaptureImage.

person Stewbob    schedule 08.04.2011