Обвод контуром DataGridViewRow - Visual Basic .NET
Формулировка задачи:
Привет всем!
Подскажите, пожалуйста, каким образом сделать так, чтобы вся активная строка моей DataGridView обводилась контуром выбранного цвета, а после того, как эта строка становилась неактивной, это обведение исчезало? С отдельной ячейкой понятно, использую CellPainting, но вот как всю активную строку обводить?
Спасибо!
Cвойство
Решил задачку. Кому интересно, вот код на VB:
Листинг программы
- Dim SelectionBackColor, SelectionBorderColor As Color
- Dim FirstVisibleColumnName, LastVisibleColumnName As String
- ' функция установки яркости (Value) исходного цвета (Color)
- Public Function Brightness(ByVal Color As Color, ByVal Value As Short) As Color
- Dim c As Integer = Value
- Dim r As Integer = Color.R + c
- Dim g As Integer = Color.G + c
- Dim b As Integer = Color.B + c
- If r > 255 Then r = 255
- If g > 255 Then g = 255
- If b > 255 Then b = 255
- If r < 0 Then r = 0
- If g < 0 Then g = 0
- If b < 0 Then b = 0
- Return Color.FromArgb(r, g, b)
- End Function
- Private Sub SetColumnsSettings()
- With DataGridView1
- ' установка цветов
- SelectionBackColor = Color.FromArgb(204, 232, 255)
- SelectionBorderColor = Brightness(SelectionBackColor, -40)
- .DefaultCellStyle.SelectionBackColor = SelectionBackColor
- ' нахождение первой и последней видимой в DataGridView колонок
- Dim p As Boolean = True
- For Each c As DataGridViewColumn In .Columns
- If c.Visible Then
- If p Then FirstVisibleColumnName = c.Name : p = False Else LastVisibleColumnName = c.Name
- End If
- Next
- End With
- End Sub
- Private Sub DataGridView1_VisibleChanged(sender As Object, e As EventArgs) Handles DataGridView1.VisibleChanged
- If DataGridView1.Visible Then SetColumnsSettings()
- End Sub
- Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
- DataGridView1.Invalidate()
- End Sub
- Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
- If e.RowIndex = DataGridView1.CurrentCell.RowIndex Then
- Dim b As Rectangle = DataGridView1.GetRowDisplayRectangle(e.RowIndex, False)
- Dim bl As Rectangle = DataGridView1.GetColumnDisplayRectangle(DataGridView1.Columns(LastVisibleColumnName).Index, False)
- Dim w As Integer = bl.Left + bl.Width - 1
- If w < 0 Then w = b.Left + b.Width
- b = New Rectangle(b.X, b.Y, w, b.Height - 1)
- e.Paint(b, DataGridViewPaintParts.All Or DataGridViewPaintParts.Border)
- Using p As New Pen(SelectionBorderColor, 1)
- e.Graphics.DrawRectangle(p, b)
- End Using
- e.Handled = True
- End If
- End Sub
SelectionMode
вашей DataGridView должно быть установлено вFullRowSelect
Решение задачи: «Обвод контуром DataGridViewRow»
textual
Листинг программы
- Private Sub DataGridView1_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
- DataGridView1.Invalidate()
- End Sub
- Private Sub DataGridView1_RowPostPaint(sender As System.Object, e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint
- If (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then
- Dim rowBounds As Rectangle = DataGridView1.GetRowDisplayRectangle(e.RowIndex, True)
- Dim pn As Pen = New Pen(Brushes.Red, 2)
- Try
- e.Graphics.DrawRectangle(pn, rowBounds)
- Finally
- pn.Dispose()
- End Try
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д