Winform下DataGridView 一個單元格中實現多個超鏈接



如圖:
//1.添加一個超鏈接列,並控制其大小不可改變,固定大小
DataGridViewLinkColumn dgvlcOprate = new DataGridViewLinkColumn();
            dgvlcOprate.HeaderText = "操作";
            dgvlcOprate.Width = 120;
            dgvlcOprate.Resizable = DataGridViewTriState.False;//設置此列不可調整大小
            dgvlcOprate.Name = "oprate";

            dgvData.Columns.Add(dgvlcOprate);

//2.設置單元格中連接的操作
 dgvData.Rows[index].Cells["oprate"].Value = "查看" + " | " + "編輯" + " | " + "刪除";

//3.獲取鼠標在單元格中點擊的位置
       int mouseX = 0;
        int mouseY = 0;
        private void dgvData_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                if (dgvData.Columns[e.ColumnIndex].Name == "oprate")
                {
                    mouseX = e.X;
                    mouseY = e.Y;
                }
            }
        }

//4.在點擊當前單元格時,鼠標點擊的位置和單元格的寬度比較,控制點擊的位置,算出點擊的是哪裏,控制點擊的事件
 private void dgvData_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
 switch (dgvData.Columns[e.ColumnIndex].Name)
                {
case "oprate":
Rectangle rc = dgvData.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);//單元格區域的矩形
                        if (0 < mouseX && mouseX < rc.Width / 3)
                        {
                            MessageBox.Show("查看" + e.RowIndex + "行" + e.ColumnIndex + "列");
                        }
                        else if (rc.Width / 3 < mouseX && mouseX < ((rc.Width / 3) * 2))
                        {
                            MessageBox.Show("編輯" + e.RowIndex + "行" + e.ColumnIndex + "列");
                        }
                        else if (((rc.Width / 3) * 2) < mouseX && mouseX < rc.Width)
                        {
                            MessageBox.Show("刪除" + e.RowIndex + "行" + e.ColumnIndex + "列");
                        }
break;
}
          }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章