[英]how to solve Unable to cast object of type 'System.Windows.Forms.Form in VB.Net
[英]VB.NET: Unable to cast object of type 'System.Windows.Forms.MouseEventArgs' to type 'System.Windows.Forms.KeyPressEventArgs'.'
我正在尝试创建一个具有文本框的程序,我需要监视用户输入以仅允许字符、空格和控制操作。 这是我拥有的所有代码:
Private Sub Button1_Click(sender As Object, e As KeyPressEventArgs) Handles Button1.Click
TextBox1.ReadOnly = False
If TimesPressed = 0 Then
Label2.Visible = False
TextBox1.Text = “Welcome to VB.Net, ” & TextBox1.Text
Button1.Text = "Repeat"
TextBox1.ReadOnly = True
TextBox1.BackColor = SystemColors.Window
TimesPressed = 1
ElseIf TimesPressed = 1 Then
Label2.Visible = True
TextBox1.Clear()
Button1.Text = "Run"
TimesPressed = 0
Else
TimesPressed = 0
End If
End Sub
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
If Char.IsLetter(e.KeyChar) = False And Char.IsWhiteSpace(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
e.Handled = True
End If
End Sub
然后我有一个提交输入的按钮,但是当我尝试点击它时,我会看到一个错误框,上面写着:
无法将“System.Windows.Forms.MouseEventArgs”类型的对象转换为“System.Windows.Forms.KeyPressEventArgs”类型。
我不知道该怎么做,我无法在任何地方找到我理解的答案。 我该如何解决这个问题?
我不太确定为什么 Spevacus 删除了他的回答; 这是正确的。 按钮单击处理程序继承自Control.Click事件,它将EventArgs
类型的对象作为其第二个参数。 当你点击一个按钮类型的对象MouseEventArgs
从创建,而这个下降EventArgs
作为继承层次结构中的孩子,所以它可以被传递到单击处理程序(因为小时候类型总是可以被自动转换为的任何一个其父类型)
KeyPressEventArgs
也是EventArgs
后代,但它是MouseEventArgs
的兄弟,而不是继承关系。 因此,当您单击按钮并创建MouseEventArgs
,它无法传递给声明为采用KeyPressEventArgs
的 Sub/Function,因为两者之间没有自动转换。 Mouse
和KeyPress
共享同一个父对象,但它们是不同的东西,不能转换。
长话短说,更改您的按钮单击处理程序,使其使用EventArgs
而不是KeyPressEventArgs
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
顺便说一句,在将控件添加到表单后,请始终重命名它们。 对于正在阅读您的代码并试图提供帮助的其他人来说,没有什么比必须弄清楚并记住 30 个按钮 X 或文本框 Y 中的哪一个做什么/是什么更糟糕的了 - 将它们重命名为“_inputTextBox”或“_saveButton”需要大约 2 秒,并且随着您的程序变得越来越复杂,它也可以为您提供不可估量的帮助。
您对Button1_Clicked
的参数稍有不正确。
您的e
参数应该是一个EventArgs
变量。
为了方便复制粘贴,下面是它的声明现在的样子:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
正如@TechGnome 所建议的,您应该尝试双击表单设计器中的按钮以查看自动生成的代码的外观并从那里进行编辑。 它为您完成了大部分繁重的工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.