VB.Net2005中TabControl实现Disabl功能,例一

Public Class TabControlEx : Inherits TabControl

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Select Case m.Msg
            Case &H201 ''WM_LBUTTONDOWN
                Dim tp As Object = GetTabPage(New Point(m.LParam.ToInt32))
                If Not tp Is Nothing AndAlso TypeOf (tp) Is TabPage Then
                    If tp.Enabled = False Then
                        Return
                    End If
                End If

        End Select

        MyBase.WndProc(m)
    End Sub

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Dim obj As Object = Control.FromHandle(msg.HWnd)
        If Not obj Is Nothing AndAlso TypeOf obj Is TabControlEx AndAlso obj.Focus Then
            If keyData = (Keys.Tab Or Keys.Control) OrElse keyData = Keys.Right Then
                Dim tp As Object = GetNextEnablePage()
                If Not tp Is Nothing AndAlso TypeOf (tp) Is TabPage Then
                    SelectedTab = tp

                    Return True
                End If
            End If
            If keyData = (Keys.Tab Or Keys.Shift Or Keys.Control) OrElse keyData = Keys.Left Then
                Dim tp As Object = GetProvEnablePage()
                If Not tp Is Nothing AndAlso TypeOf (tp) Is TabPage Then
                    SelectedTab = tp

                    Return True
                End If
            End If
            If keyData = Keys.Up OrElse keyData = Keys.Down Then
                Dim tp As Object = GetLastEnablePage()
                If Not tp Is Nothing AndAlso TypeOf (tp) Is TabPage Then
                    SelectedTab = tp

                    Return True
                End If
            End If
        End If

        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

    Protected Overrides Sub OnDrawItem(ByVal e As System.Windows.Forms.DrawItemEventArgs)
        MyBase.OnDrawItem(e)

        Dim pg As TabPage = TabPages(e.Index)
        Dim sf As New StringFormat
        sf.Alignment = StringAlignment.Center
        sf.LineAlignment = StringAlignment.Center
        Dim fnt As New Font(pg.Font, FontStyle.Bold)

        Dim sb As New SolidBrush(Color.Gray)
        If SelectedIndex = e.Index Then
            e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds)
            'ControlPaint.DrawFocusRectangle(e.Graphics, pg.Bounds)
        End If

        If pg.Enabled = True Then
            If SelectedIndex = e.Index Then
                e.Graphics.DrawString(pg.Text, fnt, SystemBrushes.ControlText, RectangleF.op_Implicit(e.Bounds), sf)
            Else
                e.Graphics.DrawString(pg.Text, pg.Font, SystemBrushes.ControlText, RectangleF.op_Implicit(e.Bounds), sf)
            End If
        Else
            e.Graphics.DrawString(pg.Text, pg.Font, sb, RectangleF.op_Implicit(e.Bounds), sf)
        End If

        sf.Dispose()
        sb.Dispose()
        fnt.Dispose()
    End Sub

    Private Function GetTabPage(ByVal pt As Point) As Object
        Dim nIndex As Integer = 0
        For nIndex = 0 To TabCount - 1
            If GetTabRect(nIndex).Contains(pt.X, pt.Y) Then
                Return TabPages(nIndex)
            End If
        Next
        Return Nothing
    End Function

   
End Class 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值