2013-10-25 3 views
0

Я пытаюсь понять, почему мой AddHandler не работает.Dynamic UserControl AddHandler

Я нашел обходное решение, если кнопки всегда на одной форме, но они могут быть не в будущем.

Я также создавать эти кнопки, так что я могу добавить несколько переменных для последующего использования

Любой есть простой ответ для меня, пожалуйста?

Благодаря Марк

ФОРМА

Public Class Form1 

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    For n = 0 To 3 
     Dim ctl As New item_button 
     AddHandler ctl.Click, AddressOf Me.ClickMe 
     ctl.Name = "btn" & n 
     ctl.btn.Text = "Button " & n 
     ctl.btnID = n 
     ctl.Location = New Point(10, n * 50) 
     Me.Controls.Add(ctl) 
    Next 
End Sub 

Public Sub ClickMe(ByVal s As Object, ByVal e As EventArgs) 
    'do something 
    Dim btn As item_button 
    btn = CType(s, item_button) 

    TextBox1.Text = "Button " & s.btnID & " was pressed" 
End Sub 

End Class 

ITEM_BUTTON

Public Class item_button 

Public btnID As Integer 
Public btnColor As System.Drawing.Color 



Public Function ClickIt() As Integer 
    Return btnID 
End Function 
End Class 
+0

_ "почему мой AddHandler не working_ Do вы получаете исключение? –

+0

Просто не срабатывает –

ответ

1

Ваш "Button" не наследует Button:

Public Class ItemButton ' Naming-Conventions: http://msdn.microsoft.com/en-us/library/ms229040(v=vs.110).aspx 
    Inherits Button 

    Public Property BtnID As Integer 
    Public Property BtnColor As System.Drawing.Color 

    Public Function ClickIt() As Integer 
     Return btnID 
    End Function 
End Class 

Так как я не уверен, что вы на самом деле пытаетесь достичь я покажу вам пример с пользовательским событием, которое возникает в назначаемой кнопке и обрабатывается в виде:

Public Class ItemButton 
    Inherits Button 

    Public Property BtnID As Integer 
    Public Property BtnColor As System.Drawing.Color 
    Public Event ButtonClicked(sender As ItemButton, buttonID As Int32) 

    Private Sub clicked(sender As Object, e As EventArgs) Handles Me.Click 
     RaiseEvent ButtonClicked(Me, BtnID) 
    End Sub 
End Class 

в виде:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    For n = 0 To 3 
     Dim ctl As New ItemButton 
     AddHandler ctl.ButtonClicked, AddressOf Me.ItemButtonClicked 
     ctl.Name = "btn" & n 
     ctl.Name = "Button " & n.ToString() 
     ctl.btnID = n 
     ctl.Location = New Point(10, n * 50) 
     Me.Controls.Add(ctl) 
    Next 
End Sub 

Public Sub ItemButtonClicked(ByVal btn As ItemButton, ByVal buttonID As Int32) 
    TextBox1.Text = "Button " & buttonID & " was pressed" 
End Sub 
+0

Это привело к сбою конструктора с ошибками AutResize –

+0

@MarkCooney: Я отредактировал свой ответ. Однако я не уверен, почему вы получаете исключение. Попробуйте удалить код местоположения. –

+0

Я добавил ваш пример кода в проект, но кнопка «Наследует» вызывает следующее: Ошибка Базовый класс «System.Windows.Forms.Button», указанный для класса «item_button», не может отличаться от базового класса «System.Windows» .Forms.UserControl 'одного из своих других частичных типов. \t C: \ Users \ Mark \ AppData \ Local \ Temporary Projects \ CashRegister \ item_button.vb CashRegister –

0

Рассортировано

Private Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.Click 
    RaiseEvent ButtonClicked(Me, btnID) 
End Sub 

Спасибо Тим, ваш код помог

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

  • Нет связанных вопросов^_^