我真的会向社区提供一些帮助,我正在遭受程序员的阻碍,并试图以多种方式解决问题,但无济于事。
我创建了一个更大项目的演示(模型)并暂时存储在这里: Demo of the issue
发生了什么:
如果我按下Exeggcute
按钮,则按钮1至4(在TabPage1
和TabPage2
中)将被禁用,TabPage
也是如此。
会发生什么:
如果我按下Exeggcute
按钮,则按钮1至4(在TabPage1
和TabPage2
)应更改为大写字母;但是,此更改应仅影响按钮而不影响标签页标题。这些按钮被禁用,只是作为概念的证明;目标是实际使他们的文本全部上限。
这是我正在使用的代码:
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
答案 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