合并 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
我探索过并发现这两种方式都无法解决 因此,通过不在我发布的任何帖子(编辑的..等)上实施来解决。
给您带来不便,敬请谅解。 谢谢SSD