从自定义控件

时间:2018-05-01 20:10:20

标签: vb.net event-handling custom-controls

我创建了一个包含许多文本框,标签和按钮的用户控件。

在自定义控件中,有自定义处理程序处理lostfocus和textchanged以进行格式化和错误的输入预防。

作为lostfocus处理程序的一部分,检查输入的数量是否太大,或者阻止用户退出文本框,或者对于具有相关按钮的5个文本框触发按钮单击事件。

    Public Sub txtLostFocus(sender As Object, e As System.ComponentModel.CancelEventArgs)

    Dim txt = DirectCast(sender, TextBox)
    Dim sAmtText As String = txt.Text

    If sAmtText <> "" Then
        If txt.Tag = "Money" Then

            sAmtText = sAmtText.Replace(",", String.Empty)
            sAmtText = sAmtText.Replace("$", String.Empty)

            If Val(sAmtText) > 999999.99 Then
                MsgBox("The amount you are trying to enter is too large.")

                Select Case txt.Name
                    Case "txtNetSales"
                        btnNetSalesBreak_Click(sender, e)
                    Case "txtCdnCash"
                        btnCashBreak_Click(sender, e)
                    Case "txtCheques"
                        btnChequesBreak_Click(sender, e)
                    Case "txtCredit"
                        btnCreditBreak_Click(sender, e)
                    Case "txtFloat"
                        btnFloatBreak_Click(sender, e)
                    Case Else
                        e.Cancel = True
                End Select
            Else
                txt.Text = FormatCurrency(txt.Text)
            End If
        End If
    End If

End Sub

在自定义控件本身中,这可以正常工作。

在我的表单应用程序中,我添加了大约十几个这样的内容,并且我循环遍历其中的控件以创建通用处理程序。

    For Each pnl As Control In cs.Controls
        For Each ctrl As Control In pnl.Controls
            Select Case ctrl.GetType()
                Case GetType(Button)
                    AddHandler ctrl.Click, AddressOf ButtonClick
                Case GetType(TextBox)
                    AddHandler ctrl.KeyPress, AddressOf txtKeyPress
            End Select
        Next
    Next

然而,即使在表单上的单击执行它需要做的事情,在自定义控件内引发的单击事件似乎没有击中表单内的处理程序。 (现在只是一个带按钮名称的消息框)

此外,如果我在自定义控件中放置一个消息框,那么代码只运行自定义控件,甚至可以单击lostfocus,但单击按钮本身会触发内部和外部的一个。

因此,从自定义控件内部调用的事件与甚至在其外部创建的事件进行交互也是如此,如果是这样,我做错了什么?

或者我是否必须将丢失的焦点代码移出控件?

任何意见都会受到赞赏。

0 个答案:

没有答案