如何禁用TabControl中的所有按钮

时间:2017-09-13 22:31:43

标签: vb.net

我真的会向社区提供一些帮助,我正在遭受程序员的阻碍,并试图以多种方式解决问题,但无济于事。

我创建了一个更大项目的演示(模型)并暂时存储在这里: Demo of the issue

发生了什么: 如果我按下Exeggcute按钮,则按钮1至4(在TabPage1TabPage2中)将被禁用,TabPage也是如此。

会发生什么: 如果我按下Exeggcute按钮,则按钮1至4(在TabPage1TabPage2)应更改为大写字母;但是,此更改应仅影响按钮而不影响标签页标题。这些按钮被禁用,只是作为概念的证明;目标是实际使他们的文本全部上限。

这是我正在使用的代码:

ctl.Text = UCase(ctl.Text) - 这不起作用,为什么?我需要按钮以大写字母显示;但是,只有禁用它们的选项才有效。为什么呢?

Public Class Form1
    Private Sub BtnExeggcute_Click(sender As Object, e As EventArgs) Handles BtnExeggcute.Click
        Dim ctl As Control
        For i = 0 To Controls.Count - 1
            ctl = Controls(i)
            If TypeOf ctl Is TabControl Then
                For j = 0 To Controls.Count - 1
                    If TypeOf Controls(j) Is TabControl Then
                        ctl.Text = UCase(ctl.Text) ' This does not work why? I need the buttons to be shown in uppercase; however, only disabling them works.
                        ctl.Enabled = False
                    End If
                Next j
            End If
        Next i
    End Sub
End Class

1 个答案:

答案 0 :(得分:2)

在现有方法的基础上,您需要浏览每个TabControl,然后浏览每个TabPage,然后浏览每个Button

如果您没有对索引执行任何操作,则可以使用For Each而不是For。您还可以使用Enumerable.OfType(Of TResult)而不是TypeOf T Is过滤每个循环上的控件枚举(正如@plutonix已经提到的那样)。

' only controls which are TabControls
For Each tabControl As Control In Controls.OfType(Of TabControl)
    ' only controls in each TabControl which are TabPages
    For Each tabPage As Control In tabControl.Controls.OfType(Of TabPage)
        ' only controls in each TabPage which are Buttons
        For Each button As Control In tabPage.Controls.OfType(Of Button)
            ' reached a button! uppercase it's text
            button.Text = button.Text.ToUpperInvariant
        Next
    Next
Next