从按钮内部获取面板并更改 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 或任何合适的内容中。