做第一版《机房收费系统》时,听说有同学实现了一个功能:右击行,显示“下机”,点击“下机”删除某个正在上机的学生,把我羡慕的不得了,心想,在我机房重构的时候,也要实现这个功能,于是,开始期盼。。。终于等到了自己要做“选中下机”的这一天。。。
整体思路:
右击显示“下机”,和点击“下机”删除是分开的两个操作。要先根据我们鼠标右击的位置,确定所在的行,显示“下机”,然后才能点击“下机”,执行下机操作。
具体操作:
1、控件:ContextMenuStrip
添加控件,编辑选项,在这里不仅可以添加“下机”,也可以添加“复制”“粘贴”等。
2、代码:
'右击事件 Private Sub DgvLineManage_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DgvLineManage.CellMouseDown If e.Button = Windows.Forms.MouseButtons.Right Then If e.RowIndex >= 0 Then '若行已是选中状态,就不再进行设置。 If DgvLineManage.Rows(e.RowIndex).Selected = False Then DgvLineManage.ClearSelection() DgvLineManage.Rows(e.RowIndex).Selected = True End If '只选中一行时,设置活动单元格 If DgvLineManage.SelectedRows.Count = 1 Then DgvLineManage.CurrentCell = DgvLineManage.Rows(e.RowIndex).Cells(e.RowIndex) End If '获取鼠标右击位置后,弹出操作菜单 ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y) End If End If
end sub
Private Sub 删除ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 删除ToolStripMenuItem.Click For Each r As DataGridViewRow In DgvLineManage.SelectedRows If Not r.IsNewRow Then '添加下机操作的代码 '**************我的下机代码********** If (MsgBox("确定要强制此用户下机吗?", MsgBoxStyle.OkCancel + MsgBoxStyle.Information, "提示") = MsgBoxResult.Ok) Then '选中下机 Dim CardId As String Dim RowNum As Integer '要删除的行 '获取选中行的卡号 CardId = Trim(DgvLineManage.SelectedRows(RowNum).Cells(0).Value.ToString()) Call OffLine(CardId) MessageBox.Show("强制下机成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) End If '**************我的下机代码********** '将选中的行移除。 DgvLineManage.Rows.Remove(r) End If Next End Sub
这是选中一行下机的操作,选中多行下机的操作,添加一个循环就可以了,读者可以自行探索一下。
小结:
功能很简单,想到这个功能不简单。我们要善于发现,敢于操作。