美文网首页
Winform#01 -- DataGridView 添加按钮

Winform#01 -- DataGridView 添加按钮

作者: 喜欢书的女孩 | 来源:发表于2020-11-05 20:33 被阅读0次

    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("已取消");
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:Winform#01 -- DataGridView 添加按钮

          本文链接:https://www.haomeiwen.com/subject/nblvektx.html