c#中創建好了listbox,已經顯示好所有行程,想要選中其中一個行程右鍵彈出關閉行程選單。但我怎么鼓搗就是右鍵不彈出選單,能給指點下嗎


uj5u.com熱心網友回復:
背景關系選單彈出用show就可以了。指定控制元件和位置,就可以在控制元件坐標系的指定位置彈出。你這個問題還很多,分還很少^ ^
取滑鼠點擊的listbox的項有幾種做法,可以用API SENDMESSAGE 發送LB_ITEMFROMPOINT = &H1A9訊息,需要注意的是滑鼠坐標的坐標系。也可以直接計算出來,給你一點代碼,自己看看吧:
Public Class Form1
Dim WithEvents prcListBox As ListBox
Dim popMenu As ContextMenuStrip
Dim WithEvents popMenuItem_Kill As ToolStripItem
Dim prcList As New List(Of Process)
Dim pickIdx As Integer = -1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'串列
prcListBox = New ListBox
prcListBox.Dock = DockStyle.Fill
Me.Controls.Add(prcListBox)
'選單
popMenu = New ContextMenuStrip
popMenuItem_Kill = popMenu.Items.Add("結束行程")
'保存行程
prcList.AddRange(Process.GetProcesses)
'顯示
For i As Integer = 0 To prcList.Count - 1
prcListBox.Items.Add(prcList(i).ProcessName & " " & prcList(i).MainWindowTitle)
Next
End Sub
Private Sub prcListBox_MouseUp(sender As Object, e As MouseEventArgs) Handles prcListBox.MouseUp
If e.Button = MouseButtons.Right Then
For i As Integer = 0 To prcListBox.Items.Count - 1
'在item的rect內
If prcListBox.GetItemRectangle(i).Contains(e.Location) Then
'記錄點擊專案、修改listbox顯示、顯示選單
pickIdx = i
prcListBox.SelectedIndex = i
popMenu.Show(prcListBox, e.Location)
Return
End If
Next
End If
End Sub
Private Sub popMenuItem_Kill_Click(sender As Object, e As EventArgs) Handles popMenuItem_Kill.Click
If pickIdx <> -1 Then
Try
'干掉行程并從串列移除
prcList(pickIdx).Kill()
prcList.RemoveAt(pickIdx)
Catch ex As Exception
'玩嘛……干不掉拉到,一般的提升權限可能能多干掉兩個
MsgBox(ex.ToString)
Finally
'無論如何要恢復標志
pickIdx = -1
End Try
End If
End Sub
End Class
uj5u.com熱心網友回復:
Public Class Form1
Dim WithEvents prcListBox As ListBox
Dim popMenu As ContextMenuStrip
Dim WithEvents popMenuItem_Kill As ToolStripItem
Dim prcList As New List(Of Process)
Dim pickIdx As Integer = -1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'串列
prcListBox = New ListBox
prcListBox.Dock = DockStyle.Fill
Me.Controls.Add(prcListBox)
'選單
popMenu = New ContextMenuStrip
popMenuItem_Kill = popMenu.Items.Add("結束行程")
'保存行程
prcList.AddRange(Process.GetProcesses)
'顯示
For i As Integer = 0 To prcList.Count - 1
prcListBox.Items.Add(prcList(i).ProcessName & " " & prcList(i).MainWindowTitle)
Next
End Sub
Private Sub prcListBox_MouseUp(sender As Object, e As MouseEventArgs) Handles prcListBox.MouseUp
If e.Button = MouseButtons.Right Then
For i As Integer = 0 To prcListBox.Items.Count - 1
'在item的rect內
If prcListBox.GetItemRectangle(i).Contains(e.Location) Then
'記錄點擊專案、修改listbox顯示、顯示選單
pickIdx = i
prcListBox.SelectedIndex = i
popMenu.Show(prcListBox, e.Location)
Return
End If
Next
End If
End Sub
Private Sub popMenuItem_Kill_Click(sender As Object, e As EventArgs) Handles popMenuItem_Kill.Click
If pickIdx <> -1 Then
Try
'干掉行程并從串列移除
prcList(pickIdx).Kill()
prcList.RemoveAt(pickIdx)
Catch ex As Exception
'玩嘛……干不掉拉到,一般的提升權限可能能多干掉兩個
MsgBox(ex.ToString)
Finally
'無論如何要恢復標志
pickIdx = -1
End Try
End If
End Sub
End Class
uj5u.com熱心網友回復:
老了,不中用了。。'干掉行程并從串列移除
prcList(pickIdx).Kill()
prcList.RemoveAt(pickIdx)
prcListBox.Items.RemoveAt(pickIdx)
寫來寫去就忘了自己是誰,自己在哪,自己宣告的變數是干嘛的了。
uj5u.com熱心網友回復:
https://blog.csdn.net/qq_33712555/article/details/80051754轉載請註明出處,本文鏈接:https://www.uj5u.com/net/73225.html
標籤:C#
