Захват изображения внутри метки - PullRequest
2 голосов
/ 08 апреля 2011

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

36 кнопок с меткой от btn1 до btn36 Три пустых метки с именем capture1 capture2 capture3

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

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

1 Ответ

3 голосов
/ 08 апреля 2011

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

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_Нажмите подпрограммы, которые вызывают подпрограмму CaptureImage.

...