Цвет отдельной ячейки TableLayoutPanel

У меня есть tablelayoutpanel 10 на 10 и массив 10 на 10 в vb.net. Я хочу иметь возможность щелкнуть мышью по ячейке, и эта конкретная ячейка изменит цвет, а соответствующий элемент массива будет равен 1. Ненажатая ячейка будет иметь 0 в массиве и так далее. Щелкните другую ячейку, ячейка изменит цвет, и соответствующий элемент массива будет обновлен.

Я не уверен, как изменить цвет отдельных ячеек в tableLayoutPanel после нажатия кнопки мыши на этой ячейке.

Пробовал искать идеи в гугле, но ничего конкретного не нашел. Любая помощь приветствуется.


person Joe    schedule 18.09.2017    source источник


Ответы (1)


Ячейки не являются элементами управления и не обеспечивают индивидуальный контроль над цветом фона. Вы можете поместить панель в каждую ячейку и добавить обработчики во время выполнения. В этом примере будет переключаться цвет между красным и синим для каждой ячейки в вашем TLP.

Private panels As New Dictionary(Of Panel, Point)()
Private values(9, 9) As Integer

Private Sub PanelClick(sender As Object, e As EventArgs)
    Dim s = DirectCast(sender, Panel)
    Dim x = panels(s).X
    Dim y = panels(s).Y
    values(x, y) = If(values(x, y) = 0, 1, 0)
    s.BackColor = If(values(x, y) = 0, Color.Red, Color.Blue)
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For i = 0 To TableLayoutPanel1.ColumnCount - 1
        For j = 0 To TableLayoutPanel1.RowCount - 1
            Dim s = TableLayoutPanel1.GetControlFromPosition(i, j)
            If s IsNot Nothing Then
                Dim p = DirectCast(TableLayoutPanel1.GetControlFromPosition(i, j), Panel)
                panels.Add(p, New Point(i, j))
                AddHandler p.Click, AddressOf PanelClick
            End If
        Next
    Next
End Sub
person djv    schedule 18.09.2017