Datagridview выделено несколько ячеек в строке - по нажатию правой клав узнать номер первой и последней ячейки - Visual Basic .NET
Формулировка задачи:
Доброго! А как вызвать контекстное меню, когда в datagridview выделено несколько ячеек в строке и при этом необходимо узнать номер первой и последней выделенной ячейки. В msflexgrid было colsel (номер последней ячейки).
Пробовал узнать через счетчик выделенных ячеек, но если опять нажать на любую ячейку правой клавишей, то счетчик не сбрасывается и выделяются вместо одной столько, сколько было выделено в предыдущий раз.(счетчик сбрасывается по левой клавише).
я просто завис с этой проблемой!
коряво получилось , но надеюсь понять можно…
Решение задачи: «Datagridview выделено несколько ячеек в строке - по нажатию правой клав узнать номер первой и последней ячейки»
textual
Листинг программы
Public Function GetSelectInfo(ByVal Table As DataGridView) As SelectInfo
If Table.SelectedCells.Count = 0 Then
Return Nothing ' возвращает nothing если нет выделенных ячеек
End If
Dim si As New SelectInfo With {.StartRowIndex = Integer.MaxValue, .StartColIndex = Integer.MaxValue, .EndRowIndex = -1, .EndColIndex = -1}
For Each c As DataGridViewCell In Table.SelectedCells 'перебор выделенных ячеек в таблице и определения максимального и минимального индекса строки и колонки
If si.StartRowIndex > c.RowIndex Then si.StartRowIndex = c.RowIndex
If si.StartColIndex > c.ColumnIndex Then si.StartColIndex = c.ColumnIndex
If si.EndRowIndex < c.RowIndex Then si.EndRowIndex = c.RowIndex
If si.EndColIndex < c.ColumnIndex Then si.EndColIndex = c.ColumnIndex
Next
If (si.EndRowIndex - si.StartRowIndex + 1) * (si.EndColIndex - si.StartColIndex + 1) = Table.SelectedCells.Count Then ' проверка на то, что выделение связано. По принципу нахождения периметра в прямоугольнике p=w*h
si.Binded = True
Else : si.Binded = False
End If
Return si
End Function
Public Class SelectInfo
Public StartRowIndex As Integer
Public StartColIndex As Integer
Public EndRowIndex As Integer
Public EndColIndex As Integer
Public Binded As Boolean ' при True означает что выделение связано, то есть имеет сплошное прямоугольное выделение
End Class