【问题标题】:Get panel from button inside and change TableLayoutPanel cell color从内部按钮获取面板并更改 TableLayoutPanel 单元格颜色
【发布时间】:2021-04-23 01:18:17
【问题描述】:
我有一个TableLayoutPanel,每个单元格中有一个面板,每个面板中有2个RadioButton。当我检查 RadioButton 时,单元格颜色会改变。我知道我可以通过将CheckedChanged 事件分配给每个 RadioButton 并硬编码单元格行和列来更改颜色。我有 15 个面板,所以会有 30 个不同的CheckedChanged 事件。
有什么方法可以让我使用sender(RadioButton) 来获取它的面板?这样我就可以使用GetCellPosition(panel) 来获取单元格并使用面板来获取其中的哪个 RadioButton 被选中。然后我可以将此事件分配给所有 RadioButtons。
【问题讨论】:
标签:
vb.net
winforms
panel
tablelayoutpanel
【解决方案1】:
这可以通过使用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 或任何合适的地方。