Обвод контуром DataGridViewRow - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Привет всем! Подскажите, пожалуйста, каким образом сделать так, чтобы вся активная строка моей DataGridView обводилась контуром выбранного цвета, а после того, как эта строка становилась неактивной, это обведение исчезало? С отдельной ячейкой понятно, использую CellPainting, но вот как всю активную строку обводить? Спасибо!
Решил задачку. Кому интересно, вот код на VB:
Листинг программы
  1. Dim SelectionBackColor, SelectionBorderColor As Color
  2. Dim FirstVisibleColumnName, LastVisibleColumnName As String
  3. ' функция установки яркости (Value) исходного цвета (Color)
  4. Public Function Brightness(ByVal Color As Color, ByVal Value As Short) As Color
  5. Dim c As Integer = Value
  6. Dim r As Integer = Color.R + c
  7. Dim g As Integer = Color.G + c
  8. Dim b As Integer = Color.B + c
  9. If r > 255 Then r = 255
  10. If g > 255 Then g = 255
  11. If b > 255 Then b = 255
  12. If r < 0 Then r = 0
  13. If g < 0 Then g = 0
  14. If b < 0 Then b = 0
  15. Return Color.FromArgb(r, g, b)
  16. End Function
  17. Private Sub SetColumnsSettings()
  18. With DataGridView1
  19. ' установка цветов
  20. SelectionBackColor = Color.FromArgb(204, 232, 255)
  21. SelectionBorderColor = Brightness(SelectionBackColor, -40)
  22. .DefaultCellStyle.SelectionBackColor = SelectionBackColor
  23. ' нахождение первой и последней видимой в DataGridView колонок
  24. Dim p As Boolean = True
  25. For Each c As DataGridViewColumn In .Columns
  26. If c.Visible Then
  27. If p Then FirstVisibleColumnName = c.Name : p = False Else LastVisibleColumnName = c.Name
  28. End If
  29. Next
  30. End With
  31. End Sub
  32. Private Sub DataGridView1_VisibleChanged(sender As Object, e As EventArgs) Handles DataGridView1.VisibleChanged
  33. If DataGridView1.Visible Then SetColumnsSettings()
  34. End Sub
  35. Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
  36. DataGridView1.Invalidate()
  37. End Sub
  38. Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
  39. If e.RowIndex = DataGridView1.CurrentCell.RowIndex Then
  40. Dim b As Rectangle = DataGridView1.GetRowDisplayRectangle(e.RowIndex, False)
  41. Dim bl As Rectangle = DataGridView1.GetColumnDisplayRectangle(DataGridView1.Columns(LastVisibleColumnName).Index, False)
  42. Dim w As Integer = bl.Left + bl.Width - 1
  43. If w < 0 Then w = b.Left + b.Width
  44. b = New Rectangle(b.X, b.Y, w, b.Height - 1)
  45. e.Paint(b, DataGridViewPaintParts.All Or DataGridViewPaintParts.Border)
  46. Using p As New Pen(SelectionBorderColor, 1)
  47. e.Graphics.DrawRectangle(p, b)
  48. End Using
  49. e.Handled = True
  50. End If
  51. End Sub
Cвойство

SelectionMode

вашей DataGridView должно быть установлено в

FullRowSelect

Решение задачи: «Обвод контуром DataGridViewRow»

textual
Листинг программы
  1. Private Sub DataGridView1_SelectionChanged(sender As System.Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
  2.     DataGridView1.Invalidate()
  3. End Sub
  4. Private Sub DataGridView1_RowPostPaint(sender As System.Object, e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint
  5.     If (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then
  6.         Dim rowBounds As Rectangle = DataGridView1.GetRowDisplayRectangle(e.RowIndex, True)
  7.         Dim pn As Pen = New Pen(Brushes.Red, 2)
  8.         Try
  9.             e.Graphics.DrawRectangle(pn, rowBounds)
  10.         Finally
  11.             pn.Dispose()
  12.         End Try
  13.     End If
  14. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.444 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут