工做中遇到一個場景:在DataGridView上單擊鼠標右鍵彈出快捷菜單,在快捷菜單內須要有「刪除本行」、「清空數據」等按鈕,因而我就本身實現了一個:
c#
實現步驟以下:
code
步驟1,創建一個C#下的Windows窗體應用程序,取名DgvMenuStripTestorm
步驟2,主窗體內的控件只有一個名爲dgvTest的DataGridView,對這個DataGridView啓用添加、啓用編輯、啓用刪除,並設置其在父容器中停靠事件
步驟3,爲這個DataGridView添加MouseClick事件,代碼以下:ip
/// <summary> /// DataGridView鼠標單擊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgvTest_MouseClick(object sender, MouseEventArgs e) { //當前操做的DataGridView DataGridView dgv = sender as DataGridView; //當前鼠標位置的行列信息 int col = dgv.HitTest(e.X, e.Y).ColumnIndex; int row = dgv.HitTest(e.X, e.Y).RowIndex; //右鍵彈出菜單 if (e.Button == System.Windows.Forms.MouseButtons.Right) { //容許用戶添加行時,最後一行爲未實際添加的行,所以不需考慮彈出菜單 if (row < 0 || (dgv.AllowUserToAddRows && row == dgv.Rows.Count - 1)) { return; } else { //取消選中當前全部選中的行和單元格 for (int i = 0; i < dgv.Rows.Count; i++) { dgv.Rows[i].Selected = false; for (int j = 0; j < dgv.Columns.Count; j++) { dgv.Rows[i].Cells[j].Selected = false; } } //選中當前鼠標所在的行 dgv.Rows[row].Selected = true; } //創建快捷菜單 ContextMenuStrip contextMenuStrip = new ContextMenuStrip(); ////功能 //contextMenuStrip.Items.Add("功能1"); //contextMenuStrip.Items.Add("功能2"); //contextMenuStrip.Items.Add("功能3"); ////分隔線 //contextMenuStrip.Items.Add(new ToolStripSeparator()); //刪除當前行 ToolStripMenuItem tsmiRemoveCurrentRow = new ToolStripMenuItem("刪除本行"); tsmiRemoveCurrentRow.Click += (obj, arg) => { dgv.Rows.RemoveAt(row); }; contextMenuStrip.Items.Add(tsmiRemoveCurrentRow); //清空全部數據 ToolStripMenuItem tsmiRemoveAll = new ToolStripMenuItem("清空數據"); tsmiRemoveAll.Click += (obj, arg) => { dgv.Rows.Clear(); }; contextMenuStrip.Items.Add(tsmiRemoveAll); contextMenuStrip.Show(dgv, new Point(e.X, e.Y)); } }
END
it