1. 实现效果:
2020-9-11
2. 代码实现:
DataGridViewButtonColumn btnModify = new DataGridViewButtonColumn();
btnModify.Name = "btnModify";
btnModify.HeaderText = "便捷操作";
dgv_all_info.Columns.Add(btnModify);
private void dgv_all_info_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
if (this.dgv_all_info.Columns[e.ColumnIndex].HeaderText == "便捷操作")
{
StringFormat sf = StringFormat.GenericDefault.Clone() as StringFormat;//设置重绘入单元格的字体样式
sf.FormatFlags = StringFormatFlags.DisplayFormatControl;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
sf.Trimming = StringTrimming.EllipsisCharacter;
e.PaintBackground(e.CellBounds, false);//重绘边框
//设置要写入字体的大小
System.Drawing.Font myFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
SizeF sizeDel = e.Graphics.MeasureString("指派", myFont);
SizeF sizeMod = e.Graphics.MeasureString("修改", myFont);
SizeF sizeLook = e.Graphics.MeasureString("关闭", myFont);
float fDel = sizeDel.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width); //
float fMod = sizeMod.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
float fLook = sizeLook.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
//设置每个“按钮的边界”
RectangleF rectDel = new RectangleF(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width * fDel, e.CellBounds.Height);
RectangleF rectMod = new RectangleF(rectDel.Right, e.CellBounds.Top, e.CellBounds.Width * fMod, e.CellBounds.Height);
RectangleF rectLook = new RectangleF(rectMod.Right, e.CellBounds.Top, e.CellBounds.Width * fLook, e.CellBounds.Height);
e.Graphics.DrawString("指派", myFont, Brushes.Black, rectDel, sf); //绘制“按钮”
e.Graphics.DrawString("修改", myFont, Brushes.Black, rectMod, sf);
e.Graphics.DrawString("关闭", myFont, Brushes.Black, rectLook, sf);
e.Handled = true;
}
}
}
private void dgv_all_info_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
Point curPosition = e.Location;//当前鼠标在当前单元格中的坐标
if (this.dgv_all_info.Columns[e.ColumnIndex].HeaderText == "便捷操作")
{
Graphics g = this.dgv_all_info.CreateGraphics();
System.Drawing.Font myFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
SizeF sizeDel = g.MeasureString("指派", myFont);
SizeF sizeMod = g.MeasureString("修改", myFont);
SizeF sizeLook = g.MeasureString("关闭", myFont);
float fDel = sizeDel.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
float fMod = sizeMod.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
float fLook = sizeLook.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
Rectangle rectTotal = new Rectangle(0, 0, this.dgv_all_info.Columns[e.ColumnIndex].Width, this.dgv_all_info.Rows[e.RowIndex].Height);
RectangleF rectDel = new RectangleF(rectTotal.Left, rectTotal.Top, rectTotal.Width * fDel, rectTotal.Height);
RectangleF rectMod = new RectangleF(rectDel.Right, rectTotal.Top, rectTotal.Width * fMod, rectTotal.Height);
RectangleF rectLook = new RectangleF(rectMod.Right, rectTotal.Top, rectTotal.Width * fLook, rectTotal.Height);
//判断当前鼠标在哪个“按钮”范围内
if (rectDel.Contains(curPosition))//指派
Assign();
else if (rectMod.Contains(curPosition))//修改
Modity();
else if (rectLook.Contains(curPosition))//关闭
CloseFlow();
}
}
}
public void Assign() {
//指派
assign = new frmAssign();
assign.ShowDialog();
}
public void Modity() {
modify = new frmModify();
modify.ShowDialog();
}
public void CloseFlow() {
//关闭流程
MessageBoxButtons msgButton = MessageBoxButtons.OKCancel;
DialogResult dr = MessageBox.Show("确定关闭流程吗?", "提示", msgButton);
if (dr == DialogResult.OK)
{
// MessageBox.Show("已关闭流程.");
}
else
{
// MessageBox.Show("已取消");
}
}
}
网友评论