VB6列表框右键单击

时间:2015-01-28 10:14:05

标签: vb6

所以我正在做一个游戏。实际上是一个mmorpg。现在,我有一个朋友列表,以列表框的形式。现在我想要做的就是设置它,这样如果我右键单击列表框中的一行,它会问我是或否,如果是,它会让我变形为该玩家。如果该行为空白,则不会有弹出窗口询问是或否。

为了帮助,warp命令是WarpMeTo Trim $()

举个例子,如果我让它变成了文本框中的东西,那就是WarpMeTo Trim $(textbox.text)

是的,我确实使用上面的内容将管理员篡改到其他输入名称的玩家。

实际上,如果有人能告诉我如何获得"列表框中该行上的名称,这将是非常棒的,因为我想在单击名称时弹出一个完全独立的菜单。

3 个答案:

答案 0 :(得分:0)

如果您一次选择一个项目,则可以在Menu Popup事件中添加以下代码:

listBox1.SelectedItem.ToString()

如果要检查列表框中的所有选定项目(多选模式),可以使用以下代码:

Dim k As Long
Dim s As String

    For k = 0 To listBox1.ListCount - 1
    If listBox1.Selected(k) Then
        s = listBox1.List(k)
        ' ... do something
    End If
    Next

答案 1 :(得分:0)

这可以分为两部分

  • 使列表框选中右键单击的项目
  • 仅在右键单击时显示项目文本

右键单击列表框中的项目时,未选中该项目

要选择项目,您必须通过mouse_event()API

模拟左键单击

之后您可以使用_Click()事件来显示该项目,但您必须确保右键单击该项目而不是单击该项目

'1 form with:
'  1 listbox: name=List1

Option Explicit

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

Private mblnRightClick As Boolean

Private Sub Form_Load()
  Dim intIndex As Integer
  'initialize no right click
  mblnRightClick = False
  'fill the listbox with some data
  List1.Clear
  For intIndex = 1 To 10
    List1.AddItem CStr(intIndex)
  Next intIndex
End Sub

Private Sub Form_Resize()
  List1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Private Sub List1_Click()
  If mblnRightClick Then
    'process simulated left click
    MsgBox List1.Text
    'release right click simulation
    mblnRightClick = False
  End If
End Sub

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = vbRightButton Then
    'simulate left click
    mouse_event MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, X, Y, 0, 0
    mblnRightClick = True
  End If
End Sub

答案 2 :(得分:0)

正如其他答案所示,问题在于列表框并不能真正满足您的需求。它仅在左键单击时更改所选项目。因此,您可以让用户左键单击他们的朋友,然后右键单击控件上的任何位置以扭曲该播放器。这会导致许多意外到来。

您可以使用坐标来确定哪个名称已被右键单击,而不必担心它被选中,类似这样的

Private Sub List_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim IndexRightClicked As Long
    If Button = vbRightButton Then
        IndexRightClicked = X + Y
        WarpMeTo Trim$(List.ItemData(IndexRightClicked))
    End If

End Sub

X = Y替换为数学,知道列表中项目的大小(并校正滚动)。

我认为,最好的选择是为朋友列表创建用户控件。这将是更多的工作,但意味着您可以创建具有好朋友列表将需要的功能的东西。然后你可以相当容易地使用CommandButtons或Labels的控制数组(两者都可以定制很多外观),这些数组在适当时滚动等。