问题描述
我在每个单元格中有一个 TableLayoutPanel
面板,每个面板中有 2 个 RadioButton
。当我检查 RadioButton 时,单元格颜色会改变。我知道我可以通过为每个 RadioButton 分配 CheckedChanged
事件并硬编码单元格行和列来更改颜色来做到这一点。我有 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 将触发 两个 RB 的 CheckedChanged
事件;一个被检查了,一个没有被检查。因此,您可能希望将代码包含在 If rb.Checked Then ... End If
或任何合适的内容中。