2017-09-13 16 views
-1

我真的會從社區獲得一些幫助,我正在遭受程序員的阻礙,並試圖以多種方式解決問題,但無濟於事。如何禁用TabControl中的所有按鈕

我創建了一個更大的項目的演示(樣機),並暫時存放在這裏吧: 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

'如果TypeOf運算控制(j)是TabControl的Then' - 這不允許,如果你想用按鈕撥弄你的代碼影響'Button's –

+2

迭代按鈕。使用'ofType'比所有'IfTypeOf ...'代碼 – Plutonix

+0

更容易使用,大概你的'j'循環應該循環遍歷'ctl.Controls'集合而不是表單的'Controls'集合。 –

回答

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 
+0

@PatrickCool我拒絕了你的編輯,其中增加了'button.Enabled = False' - OP明確指出「_按鈕被禁用僅僅是一個概念證明;目標是實際使他們的文本全部caps._」 – trashr0x

+0

這是非常正確。 @ trashr0x,感謝您抽出時間逐步教授程序並對代碼進行評論。太仁慈了。 – vicsar

+0

@vicsar很高興我能幫上忙。 – trashr0x