在DGV中合并图像作为背景后如何显示带有单元格值的单元格边框?

问题描述 投票:0回答:1

合并 Img 后想要显示普通网格线或 DGV 中带边框的所有单元格和 图像前面各自的单元格值

下面几乎尝试了所有方法,但没有取得任何成果。

我无法看到 DGV3 的每个单元格所有边框作为背景图像已在 DGV3 中使用以下编码进行组合。

您的指导将不胜感激


Private bgImage As Drawing.Image

Public Sub New()
     bgImage = Drawing.Image.FromFile("C:\Images\VPBSSquare.Jpg") 
     ResizeImage(bgImage)
End Sub

Private Sub DataGridView3_Paint(sender As Object, e As PaintEventArgs) Handles DataGridView3.Paint
    e.Graphics.DrawImage(bgImage, 0, 0, 228, 228)
End Sub

Private Sub DataGridView3_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView3.CellPainting
'Option 1
        DataGridView3.DefaultCellStyle.SelectionBackColor = Color.Transparent
        e.Graphics.DrawLine(Pens.Black, e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Right, e.CellBounds.Top)
        e.Graphics.DrawLine(Pens.Black, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right, e.CellBounds.Bottom - 1)
'OPtion 2
Dim columnindex As Integer
        If e.RowIndex <> -1 AndAlso e.ColumnIndex = columnIndex Then

            If (e.PaintParts And DataGridViewPaintParts.Background) <> DataGridViewPaintParts.None Then
                e.Graphics.DrawImage(bgImage, e.CellBounds)
            End If

            If Not e.Handled Then
                e.Handled = True
                e.PaintContent(e.CellBounds)
            End If
        End If
End Sub

Private Sub DataGridView3_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView2.CellFormatting
'Option 3
        e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        DataGridView3.BorderStyle = BorderStyle.Fixed3D
        DataGridView3.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
        DataGridView3.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
        DataGridView3.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised
End Sub

谢谢SSD

我尝试了上面的每个选项。没有取得任何成果

努力第二

我通过创建另一个项目尝试了以下方式

我意识到SystemColors.ActiveCaption是完美的矩形或方形剪刀剪切父窗体的一块 所以形式具有精确整齐的剪刀/刀片切割形状以及各自的位置和尺寸

这就像拿着一盘玻璃(表格),玻璃上印有 DGV 值,图像粘在靠近 DGV 值的玻璃上。

如果你想看到上面的效果,请看下面的代码并自行实现。

我稍微移动了DGV的位置来看看整体效果,整体效果是上面玻璃托盘提到的。

想要将 DGV 的图片框发送回 DGV,前面带有 DGV 值,需要什么?

所以对于 SystemColors.ActiveCaption 来说它是精确的空心切割 并且 Colors.Transparent 是白色背景,因此这不是透明的,而是白色不透明的补丁。 虽然我合并了 PictureBox1.BringToFront() 和 DataGridView1.SendToBack() 似乎没有任何作用

Private bgImage As Drawing.Image

Private Sub DGVImage2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Call FormLayout()
End Sub

Private Sub FormLayout()

    Dim bgImageStr As string = "C:\Images\VPBSSquare.Jpg"

    Me.TransparencyKey = SystemColors.ActiveCaption
    PictureBox1.BackColor = SystemColors.ActiveCaption

   PictureBox1.Location = New Point(286, 41)
   PictureBox1.Size = New Size(228, 228)
   PictureBox1.BackColor = SystemColors.ActiveCaption
   PictureBox1.Image = Image.FromFile(bgImageStr)
   PictureBox1.BringToFront()

   DataGridView1.Location = New Point(186, 41)
   DataGridView1.Size = New Size(228, 228)
   DataGridView1.SendToBack()

      For i As Integer = 0 To DataGridView1.Rows.Count - 1
            DataGridView1.Rows(i).Height = 76
        Next i

      For i As Integer = 0 To DataGridView1.Columns.Count - 1
            DataGridView1.Columns(i).Width = 76
            DataGridView1.Columns(i).DefaultCellStyle.Font = New Font("Microsoft Sans Serif", 30, FontStyle.Bold)
            DataGridView1.Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            ''DataGridView1.Columns(i).ReadOnly = True
        Next i
End Sub

谢谢SSD

vb.net datagridview formatting cell paint
1个回答
0
投票

我探索过并发现这两种方式都无法解决 因此,通过不在我发布的任何帖子(编辑的..等)上实施来解决。

给您带来不便,敬请谅解。 谢谢SSD

© www.soinside.com 2019 - 2024. All rights reserved.