【问题标题】: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 或任何合适的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多