【问题标题】:How to handle an event for TextBox and MaskTextBox without InvalidCastException?如何在没有 InvalidCastException 的情况下处理 TextBox 和 MaskTextBox 的事件?
【发布时间】:2018-09-24 21:25:21
【问题描述】:

任何朋友请更正我的脚本,TextBox 变量工作已完成,但 MaskTextBox 在此 EnterEvent 中返回 error

我想将event-handling 的一个函数用于TextBoxMaskTextBox

    Private Sub TextBox_Enter(sender As Object, e As EventArgs) Handles OrgNameTextBox.Enter, AddressTextBox.Enter, ContactNumMaskedTextBox.Enter
        Dim Tb As TextBox = CType(sender, TextBox)
        Dim Mtb As MaskedTextBox = CType(sender, MaskedTextBox)
        If Type = MASKTEXTBOX Then
            MTb.BackColor = Color.Yellow
            MTb.ForeColor = Color.Black
        ElseIf Type = TextBox Then
            Tb.BackColor = Color.Yellow
            Tb.ForeColor = Color.Black
        End If
    End Sub

【问题讨论】:

  • 使用GetType查看sender的类型。
  • 如果您使用从公共类派生的属性,则无需知道类型。 Control,在这种情况下。只需将sender 转换为ControlCType(sender, Control).BackColor = Color.Yellow CType(sender, Control).ForeColor = Color.Black。它适用于所有“共享”的控件。事件。
  • 没有理由使用单个事件处理程序,因为没有共享/公共代码!
  • @New Contributor 你在这里说的不是很清楚。有通用代码。该代码应该更改订阅该事件的任何控件的BackColor/ForeColor。你指的是什么?。
  • @NewContributor 是正确的,如果您不打算对引发它的每个对象执行相同的操作,则不应使用通用事件处理程序。如果您要使用这样的If...Else,那么通用事件处理程序将毫无意义。但在这种情况下,If...Else 毫无意义,因为无论如何您都想做完全相同的事情,所以只需做完全相同的事情。属性名称相同的原因是它们是相同的属性,继承自Control,所以你应该使用@Jimi建议的通用类型,或者使用通用基类TextBoxBase

标签: vb.net function textbox event-handling maskedtextbox


【解决方案1】:

事件处理程序无法工作,因为总是存在类型转换错误 正确的版本是

Private Sub TextBox_Enter(sender As Object, e As EventArgs) Handles OrgNameTextBox.Enter, AddressTextBox.Enter, ContactNumMaskedTextBox.Enter
    If TypeOf sender Is MaskedTextBox Then
        Dim Mtb As MaskedTextBox = CType(sender, MaskedTextBox)
        Mtb.BackColor = Color.Yellow
        Mtb.ForeColor = Color.Black
    ElseIf TypeOf sender Is TextBox Then
        Dim Tb As TextBox = CType(sender, TextBox)
        Tb.BackColor = Color.Yellow
        Tb.ForeColor = Color.Black
    End If
End Sub

更好的是使用两个控件的共同祖先TextBoxBase

Private Sub TextBox_Enter(sender As Object, e As EventArgs) Handles OrgNameTextBox.Enter, AddressTextBox.Enter, ContactNumMaskedTextBox.Enter
    Dim bt As TextBoxBase = TryCast(sender, TextBoxBase)
    If bt IsNot Nothing Then
        bt.BackColor = Color.Yellow
        bt.ForeColor = Color.Black
    End If
End Sub

【讨论】:

    【解决方案2】:

    我使用了@Jimi 及其工作的示例...

    Private Sub MaskedTextBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OrgNameTextBox.Enter, OrgNameTextBox.Leave        
        CType(sender, Control).BackColor = Color.Yellow
        CType(sender, Control).ForeColor = Color.Black
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-15
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2013-07-21
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多