Я создал собственный элемент управления DataGridViewColumn вместе с элементами управления DataGridViewCell. Идея состоит в том, чтобы динамически создавать содержимое ячейки, которая состоит из серии кнопок с возможностью щелчка, при привязке данных. Количество и виды кнопок зависят от переданного значения данных.Добавить кнопки для кликов в пользовательский элемент управления DataGridViewCell
Для этого я переопределяю метод Paint DataGridViewCell и проверяю formattedValue на его содержимое и соответственно рисуем кнопки. Тем не менее, эти кнопки «мертвы» и не доступны для кликов, поэтому вопрос заключается в том, как сделать их доступными для кликов, например, как добавить обработчик события click?
Должен ли я переопределить метод OnClick ячейки, а затем попытаться точно определить, какая кнопка нажата? Возможно ли это? Есть ли лучшие способы?
Это то, что я получил до сих пор:
Protected Overrides Sub Paint(graphics As Graphics, clipBounds As Rectangle, cellBounds As Rectangle, rowIndex As Integer, cellState As DataGridViewElementStates, value As Object, formattedValue As Object, errorText As String, cellStyle As DataGridViewCellStyle, advancedBorderStyle As DataGridViewAdvancedBorderStyle, paintParts As DataGridViewPaintParts)
MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts)
Dim cellBackground As New SolidBrush(cellStyle.BackColor)
graphics.FillRectangle(cellBackground, cellBounds)
cellBackground.Dispose()
PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle)
Dim sValue As String = formattedValue.ToString()
If (sValue.Contains("ViewAsPDF")) Then
Dim buttonArea As Rectangle = cellBounds
Dim buttonAdjustment As Rectangle = Me.BorderWidths(advancedBorderStyle)
buttonArea.X += buttonAdjustment.X
buttonArea.Y += buttonAdjustment.Y
buttonArea.Height -= buttonAdjustment.Height
buttonArea.Width -= buttonAdjustment.Width
buttonArea.Width = buttonArea.Width/4
ButtonRenderer.DrawButton(graphics, buttonArea, PushButtonState.Default)
TextRenderer.DrawText(graphics, "PDF", Me.DataGridView.Font, buttonArea, SystemColors.ControlText)
End If
'etcetera
End Sub
Что вы подразумеваете под словом "not clickable"? Это дает пользователю ощущение щелчка или обработки событий, похожих на обычную кнопку. – Junaith
Вам не нужно добавлять обработчик для события клика каждой создаваемой вами кнопки? – Supersnake
@Supersnake Да! Но как мне добиться этого в текущей настройке? Я не вижу никакого способа получить кнопку, которую я рисую, поэтому я могу назначить обработчик ... –