从按钮内部获取面板并更改 TableLayoutPanel 单元格颜色
Get panel from button inside and change TableLayoutPanel cell color
我在每个单元格中有一个 TableLayoutPanel
面板,每个面板中有 2 个 RadioButton
。当我选中 RadioButton 时,单元格颜色会发生变化。我知道我可以通过将 CheckedChanged
事件分配给每个 RadioButton 并对单元格行和列进行硬编码来更改颜色。我有 15 个面板,所以会有 30 个不同的 CheckedChanged
事件。
有什么方法可以使用 sender(RadioButton)
来获取它的面板吗?这样我就可以使用 GetCellPosition(panel)
获取单元格并使用面板获取选中其中的哪个 RadioButton。然后我可以将此事件分配给所有 RadioButtons。
这可以通过使用 Control.Parent
属性.
来实现
您的代码应如下所示:
Private Sub RBs_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged,
RadioButton2.CheckedChanged,
' ...etc.
Dim rb = DirectCast(sender, RadioButton)
Dim pnl = DirectCast(rb.Parent, Panel)
' TODO: Do something with pnl and/or rb.
Console.WriteLine(pnl.Name)
End Sub
但是请注意,选择某个 RadioButton 将触发 two 个 RB 的 CheckedChanged
事件;一个得到检查,一个得到未检查。因此,您可能希望将代码包装在 If rb.Checked Then ... End If
或任何合适的内容中。
我在每个单元格中有一个 TableLayoutPanel
面板,每个面板中有 2 个 RadioButton
。当我选中 RadioButton 时,单元格颜色会发生变化。我知道我可以通过将 CheckedChanged
事件分配给每个 RadioButton 并对单元格行和列进行硬编码来更改颜色。我有 15 个面板,所以会有 30 个不同的 CheckedChanged
事件。
有什么方法可以使用 sender(RadioButton)
来获取它的面板吗?这样我就可以使用 GetCellPosition(panel)
获取单元格并使用面板获取选中其中的哪个 RadioButton。然后我可以将此事件分配给所有 RadioButtons。
这可以通过使用 Control.Parent
属性.
您的代码应如下所示:
Private Sub RBs_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged,
RadioButton2.CheckedChanged,
' ...etc.
Dim rb = DirectCast(sender, RadioButton)
Dim pnl = DirectCast(rb.Parent, Panel)
' TODO: Do something with pnl and/or rb.
Console.WriteLine(pnl.Name)
End Sub
但是请注意,选择某个 RadioButton 将触发 two 个 RB 的 CheckedChanged
事件;一个得到检查,一个得到未检查。因此,您可能希望将代码包装在 If rb.Checked Then ... End If
或任何合适的内容中。