VB之TabStrip控件使用举例

先创建若干个TabStrip的选项

然后创建一个Frame控件数组,个数与TabStrip选项卡个数相等

注意设置Frame控件数组的索引值(index属性)从1开始(默认为从0开始),以便和TabStrip选项的索引值对应

然后编写以下代码:

Private Sub Form_Load()
    For i = 1 To TabStrip1.Tabs.Count
        Frame1(i).Width = TabStrip1.ClientWidth 'tab内部宽度
        Frame1(i).Height = TabStrip1.ClientHeight 'tab内部高度
        Frame1(i).Left = TabStrip1.ClientLeft 'tab内部左间距
        Frame1(i).Top = TabStrip1.ClientTop 'tab内部顶部间距
    Next i
    For i = 2 To TabStrip1.Tabs.Count
        Frame1(i).Visible = False '除了第一个选项对应的Frame,其他的都隐藏
    Next i
End Sub

Private Sub Tabstrip1_Click()
    For i = 1 To TabStrip1.Tabs.Count
    If TabStrip1.SelectedItem.Index = i Then
        Frame1(i).Tag = "dq"
    End If
    If Frame1(i).Tag = "dq" Then
        Frame1(i).Visible = True
    Else
        Frame1(i).Visible = False
    End If
    Frame1(i).Tag = Empty
    Next i
End Sub

代码说明:

Form_Load事件中 代码的作用:

1、初始化各个Frame控件的大小与位置(在设计时可以随便放置位置与大小)。

2、程序运行后,TabStrip默认显示第一个选项卡,所以将其它的选项卡对应的Frame先设置为不可见。

 Tabstrip1_Click事件 中代码的作用:

程序运行后,单击哪一个选项卡,那么该选项卡对用的Frame设置为可见。

实现方法解释:

1、通过TabStrip的选项卡Index属性与Frame的Index属性来匹配,当单击TabStrip对应选项卡时,将对应Frame的Tag属性设置为一个值(代码中用的是dq,此值可以任意指定)

2、将Frame的Tag属性为dq的控件设置为可见,其它则不可见

3、将所有Frame的Tag属性还原为默认的空值,以便用于下一次单击TabStrip选项卡。

附加说明:

1、因为Frame是容器控件,所以要注意Frame是相互独立的,不存在包含关系,如果将一个Frame置于另外一个Frame中,则不能正常显示。

2、使用BorderStyle属性设置为0-None的Frame控件作为容器比使用PictureBox控件要节省资源。

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
比网上其他版本(也包括之前在此发的两次)修正: 去除tab只有9页的限制 修正tab页宽度超过1万后,应该在其他页中的控件会留一部分在当前页 放多个没有left、top或WhatsThisHelpID的控件不会产生错误(只是不会随页变动) 修正tabstop不能保持原值错误 修正鼠标停在tab上会不断刷新占用系统资源甚至内存溢出错误(去除usercontrol_mouseover中refresh) tab标题头背景透明处理(美化了^_^) '-------------------------------------------- 修正后仍存在的不足 -------------------------------- 1、控件必须编译后使用,否则一旦拖放出新的adodc等会让自定义控件变为不可用状态的控件,TAB则会跳页错乱! 2、tab控件中的WhatsThisHelpID属性被占用(-_-#,没办法,为了省系统资源,好在多数控件有这个属性且基本没人用,偷笑^^) 3、没有WhatsThisHelpID属性的控件不会随页变动 4、如果把本控件的BackColor设成&H00FF00DA& ,则所有放在Tab页上的控件将与背景一起被透明掉。 (本控件会重画放在其上的控件,所以控件也会被透明) 这个问题其实不算问题,没人必须把背景色设的和这个完全一样吧^^,哪怕差1也可以啊,点明这个问题只是要说明本控件的背景透明或任意形状控件的制作原理 原理: backstyle设为:0 maskColor设为:&H00FF00DA& (这个控件里UserControl的BackColor也要设为:&H00FF00DA&) 在Refresh方法中将在UserControl中重绘好的图作为maskPicture,即: Set UserControl.MaskPicture = UserControl.Image 这样maskpicture中背景没有被重绘的部分保持&H00FF00DA&(即与maskcolor指定的颜色相同色),该颜色的部分即被透明 (注意,指定了backstyle=0及maskpicture后超出maskpicture大小的部分全部会被透明)!!! '---------------------------------------------------------比这个前一个版本的是没有用API的,可以在我的资源里找到前两次修改的版本,使用的话还是用这个版本 这几个控件有很多可学的地方, 比如其中的错误处理(网上的源码和我上一个修改版本的源码中错误处理的部分是不太合理的,虽然我和这个控件的其他修改者一样思路,但研究后最终还是用这次发布的这个版本) 比如上一版本中的无API绘图,这个版本有api,因此图大小可变 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 测试.vbp那个是原先旧版的测试,没有跟着新版修改,所以不兼容,此楼新版是经过测试的,编译好的ocx可以直接使用(★必须使用编译好的ocx,原因一楼已经说了★) 对编译好的ocx有疑问或自己要改进的可以直接修改TabSwitch.vbp,再重新编译
原tab控件,仿360开关控件版权归原作者! VB控件背景透明代码来自:新浪 “玄雨清风”的博客 感谢以上两位源代码作者 链接:http://pan.baidu.com/s/1hrAEXqG 密码:nfhc '-----------------------以下是转自博客的控件透明源代码(可透明至父窗体或桌面)------------- '添加一个用户控件UserControl,代如下: Option Explicit '实现用户控件UserControl的"伪透明" Private Type POINTAPI X As Long Y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const WM_ERASEBKGND = &H14 Private Const WM_PAINT = &HF Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source Public Event MouseDown(Button As Integer, Shift As Integer, X A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值