【问题标题】:Unable to cast object of type 'System.EventArgs' to type 'System.Windows.Forms.KeyEventArgs'无法将“System.EventArgs”类型的对象转换为“System.Windows.Forms.KeyEventArgs”类型
【发布时间】:2022-01-22 04:53:46
【问题描述】:

这是我的代码:

我有表单加载功能:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    AddHandler KeyDown, AddressOf Form1_KeyDown
    RaiseEvent KeyDown(Me, e)
End Sub

我有事件声明:

Event KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)

以及按下控制键时应该打开MsgBox的功能:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
    If e.KeyCode = Keys.Control Then
        MsgBox("test")
    End If
End Sub

但我有这个错误:

System.InvalidCastException : 'Impossible d'effectuer un cast d'un object de type 'System.EventArgs' en type 'System.Windows.Forms.KeyEventArgs'。'

这是完整的错误信息

所以我不知道该怎么办

【问题讨论】:

  • Re “所以我不知道我该怎么办” - 这很可悲。也许您应该创建适当的 KeyEventArgs 对象并使用它?另见docs.microsoft.com/en-us/dotnet/api/…
  • 你到底想在这里做什么?为什么要将表单加载事件 arg 转发给按键事件处理程序?
  • 我不明白你的意思?
  • 我想知道何时按下特定键盘并执行相应操作

标签: vb.net keydown


【解决方案1】:

设置Form.KeyPreview = True

另外,您的Keys.Control 是控制修饰符,您可能正在寻找Keys.ControlKey

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.KeyPreview = True
    AddHandler Me.KeyDown, AddressOf Form1_KeyDown
End Sub

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs)
    If e.KeyCode = Keys.ControlKey Then MsgBox("test")
End Sub

【讨论】:

猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多