【问题标题】:ListView HitTest returning wrong value after popup menu is shown显示弹出菜单后 ListView HitTest 返回错误值
【发布时间】:2019-01-28 12:27:48
【问题描述】:

我有一个名为 listView_MouseUp 的 ListView 方法,如果 HitTest 返回某些内容,它会在我的 ListView 中选择一个项目。之后,我测试我是否用鼠标右键单击。然后我打开一个用于修改所选项目的弹出菜单:

Private Sub listView_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim selectedListItem As ListItem
    Set selectedListItem = listView.HitTest(X, Y)
    If Not selectedListItem Is Nothing Then
        ' Select the item and load some text fields
        If Button = vbRightButton Then
            Me.PopupMenu popupChangeDocument
        End If
    End If
End Sub

如果我再次单击(鼠标左键)(在先前选择的项目上)X 和 Y 坐标是正确的(新值)并且弹出菜单不再可见。

如果我点击 ListView 的空白区域,X 和 Y 保持不变,弹出菜单会在点击位置打开。

为什么X和Y的值没有更新?

【问题讨论】:

标签: listview vb6 popup popupmenu hittest


【解决方案1】:

This link from vb-helper 应该会有所帮助。

@BillHileman 感谢您的链接。不幸的是,它没有帮助解决这个问题。但是在测试你的答案的过程中,我发现了问题:

在 listView_MouseUp 方法的末尾有一个 DoEvents 导致了这种奇怪的行为。

【讨论】:

  • 您绝对不想在事件处理程序中执行 DoEvents,这正是这些“方法”的真正含义。您可能会遇到级联问题,除非您使用安全失效代码来预测它,这完全是另一个讨论。很高兴您发现了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多