No.1TabStrip控制項和Page控制項是十分相像,如果不仔細研究,一定會搞錯。本節我們主要介紹,如何利用VBA程式碼進行TabStrip控制項的新增和操作。看上去TabStrip控制項和分頁控
2021-07-22 03:05:34
TabStrip控制項和Page控制項是十分相像,如果不仔細研究,一定會搞錯。
本節我們主要介紹,如何利用VBA程式碼進行TabStrip控制項的新增和操作。
看上去TabStrip控制項和分頁控制項一樣,分別進行頁面切換,但是其原理並不一樣。
簡單來說,分頁控制項可以當做一個容器,可新增其它控制項,如文字框、按鈕等。
TabStrip控制項卻不可以,它就是一個單獨的顯示控制項,其內部沒有任何包含控制項。
可以理解為一件透明的衣服,表單中的其它控制項都可以被顯示出來。
通過一個示例介紹一下,重點在後面。
如下圖所示,分別添加了星期一到星期日,7個Tab。
圖中控制項,除了Form表單外,全部通過VBA程式碼進行新增,所以編碼過程中,是看不到任何控制項的。
本示例可實現,切換Tab,也就是切換星期標籤,然後單擊選擇按鈕,即可顯示出標籤文字,提示選擇了星期幾。
標籤控制項和按鈕控制項都屬於Form表單內部按鈕。
整個過程似乎並沒有什麼用,但是在某些情況之下是需要這樣操作的。
如果,我們的內容不變而只改變Tab項目的時候就用到此控制項了。
比如,每天的事項是固定的,但是星期幾是不固定,所以在這些固定內容不變的情況下,只需要改變星期即可對資料進行操作,這就是一個很好的方法。
應用場景根據不同的行業來判斷,下面我們重點關注一下程式碼。
程式碼是軟體的靈魂,用眼睛看到的內容,其背後都是一些符號程式碼,通過相應的規則排列,然後編譯呈現出來的效果。
如下程式碼就是上述對話方塊成型的一個過程。
首先,新建一個Form表單,其實Form表單也可以通過程式碼創建,這示例並沒有這麼做。
然後在Form表單中新增如下程式碼:
'--------------- TabStrip 控制項 VBA程式碼程式設計
'-------- 定義按鈕類
Dim BtCom As New BtnClick
Private Sub UserForm_Initialize()
Dim aobj As Object, fobj As Object, btnObj As Object
'------------- 新建 TabStrip 控制項
Set aobj = Me.Controls.Add("Forms.TabStrip.1", "Tp")
'----------------設定 屬性
With aobj
.Top = 30
.Left = 20
.Width = Me.Width - 50
.Height = Me.Height - 90
.Style = 0
'.BackColor = RGB(221, 221, 221)
.ForeColor = QBColor(9)
.Tabs.Clear '刪除 Tab
For i = 0 To 6
aobj.Tabs.Add (VBA.Format(i, "aaaa")) '新增 Tab
Next i
End With
'新建按鈕
Set btnObj = Me.Controls.Add("Forms.CommandButton.1", "Btn1")
With btnObj
.Width = 120
.Height = 28
.Top = aobj.Top + aobj.Height - .Height - 5
.Left = aobj.Left + 10
.Caption = "選 擇"
End With
BtCom.apend btnObj '關聯按鈕事件
End Sub
上面的程式碼成功建立之後,可以運行一下試試有沒有問題。
實際上是有問題的,因為,程式碼是有區別的,有些程式碼是一些死程式碼,有些程式碼是程式碼中的靈魂。
重點來了。
有了下面的程式碼才能讓整合表單運行起來有了活的行為。
'------------- 定義類 BtnClick 按鈕事件
Private WithEvents Btn As MSForms.CommandButton
Public Sub apend(ctl As MSForms.CommandButton)
Set Btn = ctl
End Sub
'------------ Click 事件
Private Sub Btn_Click()
Dim xobj As Object
For Each xobj In Btn.Parent.Controls '遍歷表單控制項
If TypeName(xobj) = "TabStrip" Then '如果是TabStrip控制項
If xobj.Name = "Tp" Then '如果控制項名為 Tp
'新建 Label 控制項
AddLabel xobj, xobj.SelectedItem.Caption, xobj.SelectedItem.Index
Exit For
End If
End If
Next xobj
End Sub
'----------------- 新建 Label 控制項過程
Private Sub AddLabel(xobj As Object, lStr As String, c As Integer)
Dim lobj As Object
'如果 Label 已經存在
If CheckLabel(xobj, lStr, c) Then Exit Sub
'如果 Label 不存在
'新一個 Label 控制項
Set lobj = xobj.Parent.Controls.Add("Forms.Label.1")
With lobj
.Top = xobj.Top + 60
.Left = xobj.Left + 100
.Height = 60
.Width = 300
.Caption = "你選擇了: " & lStr
.ForeColor = QBColor(c)
.BackStyle = 0
With .Font
.Name = "微軟雅黑"
.Size = 30
.Bold = True
End With
End With
End Sub
'------------- 檢測 Label 控制項是否存在 返回Boolean值,True 或 False
Private Function CheckLabel(xobj As Object, lStr As String, c As Integer) As Boolean
CheckLabel = False
Dim lobj As Object
'遍歷 表單控制項
For Each lobj In xobj.Parent.Controls
'如果 Label 控制項存在
If TypeName(lobj) = "Label" Then
With lobj
.Caption = "你選擇了: " & lStr
.ForeColor = QBColor(c)
End With
CheckLabel = True
End If
Next lobj
End Function
上述程式碼裡有4個過程或函數,分別執行不同的功能,缺一不可。
這就是一些符號或文字,變成圖象的方法,其中還有很多需要掌握的內容,比如運行環境,及運行環境配置。實際上是一套很繁雜的事情,但是這些繁雜的事情只做一遍,後面就不用做了。
如果想讓自己輕鬆,從來都是經歷風雨之後的愉悅。
程式設計這件小事也一樣,如不曾毫無頭緒,哪會感覺到運行後的順暢!
對了,上面的程式碼是一個類模組,模組名可以自己設定,本示例設定為:BtnClick
歡迎關注、收藏
END
相關文章
No.1TabStrip控制項和Page控制項是十分相像,如果不仔細研究,一定會搞錯。本節我們主要介紹,如何利用VBA程式碼進行TabStrip控制項的新增和操作。看上去TabStrip控制項和分頁控
2021-07-22 03:05:34
浩南剛剛看完了realme真我GT大師系列手機發佈會,感受到了國產手機的質價比和價效比,這麼優秀的手機,於是又自費準備評測體驗一下,是不是和釋出會傳說中的一樣好。釋出會官宣真我
2021-07-22 03:05:23
2021年已經走完一半,手機廠商們的「戰事」來到中場,回顧上半場,它們又有怎樣的表現:品牌價值排名全球第幾?出貨量佔據國內多少份額?618拿到了幾個銷售冠軍?然而,這些對消費者而言意
2021-07-22 03:05:04
realme 真我 GT系列之前已經推出了真我GT和真我GT Neo兩款產品,憑藉出色的效能體驗,受到了消費者的青睞。現在,realme聯手工業設計大師深澤直人帶來了真我GT系列第三款產品
2021-07-22 03:04:41
導讀:我們在實現檢測一個字元串是否包含另一個字元串時,簡單的用一個字元串匹配演算法就可以實現,如果要實現檢測一個字元串是否包含 N 個字元串時,這個 N 有可能上千萬,再利用簡
2021-07-22 03:04:22
全球缺芯,對各行各業的影響還在繼續,最直接的表現之一就是相關行業消費品價格的持續走高,而全球缺芯歸根結底是疫情造成的。那麼問題來了,國內各行各業生產力早就火力全開,為何還
2021-07-22 03:04:15