2015-07-23 3 views
0

Я пишу что-то в vb 2010, то, что я сделал, это Form, у которого есть кнопка «new», это показывает новую форму, которая создается кодом во время выполнения, и эта форма содержит текстовое поле и еще две кнопки. проблема в том, как я могу добавить код для кнопок b1 или b2? как я могу хранить данные из текстового поля в переменной, когда я нажимаю на одну кнопку или что-то еще. Я прочитал сообщение о том, что здесь что-то похожее, но все они связаны с VBA. Я написал весь код ниже. Спасибо за помощь.Как назначить код созданной кнопке?

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
Dim f As New Form 
Dim TB As New TextBox 
    Dim b1, b2 As New Button 
    Dim l As New Label 
    With f 
     .Size = New System.Drawing.Size(220, 120) 
     .StartPosition = FormStartPosition.CenterParent 
     .Text = "new" 
     .MinimizeBox = False 
     .MaximizeBox = False 
     .Controls.Add(b1) 
     .Controls.Add(b2) 
     .Controls.Add(TB) 
     .Controls.Add(l) 
    End With 
    With l 
     .Size = New System.Drawing.Size(180, 20) 
     .Location = New Point(10, 3) 
     .Text = "label" 
    End With 
    With TB 
     .Size = New System.Drawing.Size(180, 30) 
     .Location = New Point(10, 20) 
     .Text = "" 
    End With 
    With b1 
     .Size = New System.Drawing.Size(70, 30) 
     .Location = New Point(30, 50) 
     .Text = "create" 
    End With 
    With b2 
     .Size = New System.Drawing.Size(70, 30) 
     .Location = New Point(120, 50) 
     .Text = "cancel" 
    End With 
    f.Show() 

End Sub

+0

Похож дубликатом это: http://stackoverflow.com/questions/7291461/how-do-i-create-an-event-handler-for-a-programmatically-created-object -in-vb-net –

+0

Да, я пробовал это, показывая msgbox, чтобы убедиться, что он работает правильно, но он показывает msgbox в то же время, что и созданная форма –

+0

Не обман - для Аддэндера требуется адрес существующего обработчика событий. Вам будет лучше использовать «пустую» форму с некоторым кодом в ней и просто добавить в нее элементы управления и сопоставить их с существующими обработчиками. Если это не выполнимо, вам, возможно, придется обратиться к CodeDOM – Plutonix

ответ

0

Для Вашего отображения текстового поля текста проблемы, вы можете использовать лямбду-выражение для обработчика, который сохраняет все переменные в области видимости и позволяет получить доступ к текстовому полю непосредственно.

... code above from your example ... 
With b2 
    .Size = New System.Drawing.Size(70, 30) 
    .Location = New Point(120, 50) 
    .Text = "cancel" 
End With 

AddHandler b1.Click, Sub(s, e2) 
         MsgBox(TB.Text) 
        End Sub 

f.Show() 
+0

Спасибо, я понятия не имел, что мог бы написать это таким образом ... –

+0

Если это решило вашу проблему, отметьте это как ответ :) – Thraka

Смежные вопросы