Я пытаюсь, чтобы кнопка, при нажатии, создавала новый элемент управления изображением. Чтобы каждый раз, когда я нажимаю на него, он добавляет еще один новый элемент управления изображением. Эти кадры будут иметь те же функции, что и возможность перемещать их и рисовать на них. Но кнопка только делает один и не более после этого с помощью следующего кода. Что мне не хватает?Создание новых элементов управления формы в Visual Basic
Public Class Form1
Dim xpos As New Integer
Dim ypos As New Integer
Dim pos As New Point
Dim x As Integer
Dim y As Integer
Dim canvas As New PictureBox
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer = 0
i = i + 1
canvas.Name = "canvas" & i
canvas.BackColor = Color.White
canvas.BorderStyle = BorderStyle.FixedSingle
canvas.Image = Nothing
canvas.Height = TextBox1.Text
canvas.Width = TextBox2.Text
AddHandler canvas.MouseDown, AddressOf PictureBox1_MouseDown
AddHandler canvas.MouseMove, AddressOf PictureBox1_MouseMove
Controls.Add(canvas)
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
xpos = Cursor.Position.X - canvas.Location.X
ypos = Cursor.Position.Y - canvas.Location.Y
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
pos = MousePosition
pos.X = pos.X - xpos
pos.Y = pos.Y - ypos
canvas.Location = pos
End If
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
End Class
Попытайтесь положить 'Dim canvas As New PictureBox' внутри обработчика кнопок, чтобы каждый раз программа создавала новую переменную. На данный момент вы создаете только одно - при загрузке формы. – Eminem
Я пробовал это. тогда обработчики событий мыши на панели изображений не распознают холст. – BuddyRoach
'Dim i As Integer = 0 i = i + 1' Это всегда будет 1, чтобы ваше имя всегда было одинаковым. Вместе с предложением Eminemg это должно решить вашу проблему. Для доступа к холсту в mousemove используйте 'DirectCast (отправитель, PictureBox) .Location = pos' – Saragis