【发布时间】:2020-01-10 13:41:28
【问题描述】:
我正在尝试创建一个具有文本框的程序,并且我需要监视用户输入以仅允许字符、空格和控制操作。这是我所有的代码:
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”类型。
我不知道该怎么做,也无法在任何地方找到我理解的答案。我该如何解决这个问题?
【问题讨论】:
-
能否编辑您的帖子以包含您的
button的代码?包括在此处引发错误的行将有助于诊断。 -
确保您有
Option Strict On,无论是在代码中还是在项目选项中。没有它,在运行时会出现一些签名不匹配的问题(确实需要使用Option Strict来完成,根据我的经验,您不能通过任何单个选项禁用宽松的类型检查)。 -
@Spevacus 我已经完成了你的要求
-
@TechGnome @Spevacus 自动生成的事件处理程序创建一个
EventArgs类型参数。这是因为Click事件可以由键盘和鼠标生成(尽管通过代码,不同的主题)。当由键盘生成时,EventArgs将是EventArgs.Empty,当generated by a Mouse click 时,它将设置为MouseEventArgs(并且可以强制转换)。 OP 可能手动修改了该代码。 -
我之前的评论是在按钮单击事件处理程序发布之前发布的。我 99% 确定这段代码不会用
Option Strict On编译。总的来说,这是一个好主意,并且在您处理事件时绝对必要(否则很容易获得一个足够接近编译但又足够不同以在运行时导致难以诊断的问题的签名)。
标签: vb.net