Я хочу сделать программу в VB (.NET), в которой за клик по кнопке в пользовательскую форму добавляется одна или несколько новых кнопок. Этот процесс должен работать бесконечно много раз. Затем кнопки должны вызывать публичный юзер, передавая отдельную переменную, чтобы код знал, от какой кнопки он был вызван (таким образом: знает, что делать).Динамически добавлять код во время выполнения в VB (.NET)
Я узнал, как создавать кнопки во время выполнения с кодом Button = new Button
и controls.add(Button)
. Мне также удалось передать новый код кнопке с помощью WithEvents
или AddHandler
. Но до сих пор мне всегда нужно, чтобы код был готов до запуска программы. То есть Мне нужно знать имя кнопки заранее и подготовить код.
Есть ли способ динамически создать код, отрезанный во время выполнения, который будет указывать на ранее существовавший?
Я дам вам simplyfied пример:
WithEvents NewButton01 As New Button
WithEvents NewButton02 As New Button
WithEvents NewButton03 As New Button
Private Sub AddNewButton_Click() Handles AddNewButton.Click
NewButton01.Location = New Point(10, 10)
NewButton01.Text = "01"
Controls.Add(NewButton01)
NewButton02.Location = New Point(50, 50)
NewButton02.Text = "02"
Controls.Add(NewButton02)
NewButton03.Location = New Point(90, 90)
NewButton03.Text = "03"
Controls.Add(NewButton03)
End Sub
Private Sub NewButton01_click() Handles NewButton01.Click
Call MessageBox(1)
End Sub
Private Sub NewButton02_click() Handles NewButton02.Click
Call MessageBox(2)
End Sub
Private Sub NewButton03_click() Handles NewButton03.Click
Call MessageBox(3)
End Sub
Private Sub MessageBox(flag As Integer)
MsgBox("You activated button number " & flag)
End Sub
Как вы можете видеть, это очень непрофессионально способ кодирования. Кроме того, я бы хотел, чтобы количество кнопок было создано бесконечно, поэтому я не могу использовать этот код. Я бы предпочел, чтобы VB создавал новую кнопку каждый раз, когда я нажимаю «AddNewButton» и пишу код, который ссылается на Private Sub MessageBox
или на любой другой код, который может быть в конце.
Я очень новичок в VB.Net, поэтому, пожалуйста, простите меня, если в примерах содержится что-нибудь, что заставляет вас дрожать.
И большое спасибо!
Вы должны были бы сделать lastButtonPos Static или сделать его переменный класс, чтобы использовать это несколько раз. Вместо этого я бы использовал FlowLayoutPanel и просто выполнил FlowLayoutPanel1.Controls.Add (NewButton), так что для вас все позиционируется. – Capellan
Да, я согласен, что реализация может быть лучше, но я хотел показать назначение обработчика динамического события и литье типов в обработчике событий. Я помню, как это было интересно, когда я понял о типе каста: D –
Спасибо за код! Это действительно работает, но мне все же нужно понять, что там происходит. Получаю ли я это право: «отправитель» - это переменная, которая сообщает Private Sub, откуда она была выполнена. В этом случае «отправителем» является кнопка1. Теперь вы заставляете кнопку «button1» становиться кнопкой и назначаете ее только что определенной кнопке «clickedButton»? – offeltoffel