【问题标题】:AddHandler Lambda ExpressionAddHandler Lambda 表达式
【发布时间】:2014-11-18 13:39:25
【问题描述】:

代码:

    Dim x, y as [Delegate]
    x = Sub() MeMouseMove(points)
    y = Sub() MeMouseDown(points)
    AddHandler MainGrid.MouseMove, x
    AddHandler MainGrid.MouseLeftButtonDown, y

代码背景:

  • 'MainGrid' 是一个与所在窗口大小和宽度相同的网格
  • 'x' 和 'y' 被声明为 [Delegate]
  • 'points' 是我需要通过以编程方式创建的处理程序的类
  • 'MeMouseMove' 和 'MeMouseDown' 是我需要调用的子程序

问题:

我收到一个错误:

发生了“System.InvalidCastException”类型的未处理异常
附加信息:无法将“VB$AnonymousDelegate_0”类型的对象转换为“System.Windows.Input.MouseEventHandler”类型。

我认为问题出在 x 和 y 变量的声明上

任何帮助都将不胜感激,感谢您抽出宝贵的时间,Red

【问题讨论】:

  • 一个 MouseEventHandler 有两个参数,你的 lamda 没有。
  • @HansPassant 这不起作用(请参阅下面的 bonyjoe 的回答)
  • 已尝试:将变量类型更改为空(例如:“Dim x,y”)。与初始问题相同
  • 凹凸。需要帮助,请

标签: wpf vb.net lambda expression


【解决方案1】:

MouseEventHandler 有两个参数 Object sender 和 RoutedEventArgs e,所以你应该试试

x = Sub(s, e) MeMouseMove(points)
y = Sub(s, e) MeMouseDown(points)
AddHandler MainGrid.MouseMove, AddressOf x
AddHandler MainGrid.MouseLeftButtonDown, AddressOf y

【讨论】:

  • 不幸的是,这给出了同样的问题。但是感谢您的回复,一直很感激
  • 现在尝试编辑,我总是忘记你需要 VB 中的 AddressOf 运算符
  • Address Of 不起作用,因为:'AddressOf' 操作数必须是方法的名称(不带括号)。谢谢你的帮助,红
  • 啊,好吧,那么最后一次尝试。将 (s, e) 替换为 (sender As Object, e As EventArgs) 并丢失 AddressOf 运算符
  • 如果你只是在addhandler调用中直接声明匿名方法,它工作吗? AddHandler MainGrid.MouseMove, Sub(......
【解决方案2】:

找到解决办法

        Dim x As New MouseEventHandler(Sub() MeMouseMove(points))
        Dim y As New MouseButtonEventHandler(Sub() MeMouseDown(points))

将变量“x”和“y”更改为正确的变量类型(不是 [Delegate])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2014-04-08
    • 2013-09-30
    • 2010-11-12
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多