所以我正在做一个游戏。实际上是一个mmorpg。现在,我有一个朋友列表,以列表框的形式。现在我想要做的就是设置它,这样如果我右键单击列表框中的一行,它会问我是或否,如果是,它会让我变形为该玩家。如果该行为空白,则不会有弹出窗口询问是或否。
为了帮助,warp命令是WarpMeTo Trim $()
举个例子,如果我让它变成了文本框中的东西,那就是WarpMeTo Trim $(textbox.text)
是的,我确实使用上面的内容将管理员篡改到其他输入名称的玩家。
实际上,如果有人能告诉我如何获得"列表框中该行上的名称,这将是非常棒的,因为我想在单击名称时弹出一个完全独立的菜单。
答案 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的控制数组(两者都可以定制很多外观),这些数组在适当时滚动等。