2013-10-25 89 views
0

我想了解爲什麼我的AddHandler不工作。動態用戶控件AddHandler

我發現了一種解決方法,如果按鈕總是在相同的窗體上,但他們可能不會在未來。

我也創建這些按鈕,這樣我可以添加幾個變量供以後使用

任何對我有請一個簡單的答案?

感謝 馬克

FORM

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_待辦事項你會得到一個異常? –

+0

只是不會觸發 –

回答

1

你的 「按鈕」 不從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

@MarkConey:我編輯了我的答案。不過,我不知道爲什麼你會得到例外。嘗試刪除位置代碼。 –

+0

我已將示例代碼添加到項目中,但繼承按鈕會導致以下錯誤對類'item_button'指定的基類'System.Windows.Forms.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 

感謝蒂姆,你的代碼幫助