VB.Net Make Event through 循环重复

VB.Net Make Event through loop was duplicated

提问人:DevGold 提问时间:6/16/2023 最后编辑:djvDevGold 更新时间:6/16/2023 访问量:59

问:

我有一个截图代码来显示事件列表是如何创建的。

While tb.MoveNext()
    Try
        idMenu = tb.Current.Field(Of Integer)("idMenu")
        menuName = tb.Current.Field(Of String)("HeaderName")
        ClassType = tb.Current?.Field(Of String)("ClassType")
        newTreeItem = New TreeViewItem()

        Dim clickHandler As New MouseButtonEventHandler(Sub(sender, e)
                                                            MessageBox.Show(menuName)
                                                        End Sub)
        AddHandler TryCast(newTreeItem, TreeViewItem).PreviewMouseDoubleClick, clickHandler
     Catch ex As Exception

     End Try
End While

在上面的代码中,任何工作正常但有问题的东西总是在 while 循环的最后一个显示一个固定值。MessageBox.Show

我不知道它是如何工作的。你能帮我吗!

vb.net 事件 addhandler

评论

0赞 Jimi 6/16/2023
你为什么要存放在别处?当然,这些 Fields(?) 存储循环中生成的最后一项。您是否检查过引发事件时的内容?为什么?为什么不简单地将处理程序内联?newTreeItemsender.TryCast()AddHandler

答:

2赞 JayV 6/16/2023 #1

我认为您遇到了一个问题,因为您在行中的设置方式:Message

Sub(sender, e)
    MessageBox.Show(menuName)
End Sub

该变量不是 EventHandler 代码的一部分。menuName

你可以试试这个:

Sub(sender, e)
    Dim localMenuName as String = tb.Current.Field(Of String)("HeaderName")
    MessageBox.Show(localMenuName)
End Sub

评论

0赞 DevGold 6/16/2023
你的建议对我有很大的帮助!我尝试将声明 Dim 放入循环中,它起作用了。虽然结核病。MoveNext() 将 localMenuName 调暗为 String = tb。Current.Field(Of String)(“HeaderName”) '''' 调用事件 ''' 结束
0赞 JayV 6/16/2023
@DevGold 很高兴阅读它对你有用。请不要忘记将答案标记为已接受。