VB.NET 2008/VB - 컨트롤

컨트롤 - TabControl에 닫기 버튼 만들기

본클라쓰 2011. 4. 25. 10:17

 

기본으로 제공되는 TabControl 개체를 사용하면 TabPage의 닫기 버튼이 없다.

 

받기 버튼을 만들기 위해서는 TabControlDrawMode를 TabDrawMode.OwnerDrawFixed로 변경하고 DrawItem 이벤트 처리기를 구현해야 한다.

 

 

 

TabControl의 닫기 버튼을 구현하는 코드는 다음과 같다.

 

Public Class MainTabControl
    Inherits TabControl

 

    Private ReadOnly TabPageTitleWidth As Integer = 160
    Private ReadOnly TabPageTitleHeight As Integer = 26
    Private ReadOnly TabPageTitleMargin As Integer = 6
    Private CloseImg As Image = My.Resources.Tab_Close
    Private CloseImgLocationX As Integer = TabPageTitleWidth - (CloseImg.Width + 3)
    Private CloseImgLocationY As Integer = ((TabPageTitleHeight - CloseImg.Height) / 2) + 3

 

    ' 탭 컨트롤의 초기값을 설정한다.
    Public Sub InitailTabControl()
        Me.ItemSize = New System.Drawing.Size(TabPageTitleWidth, TabPageTitleHeight)
        Me.SizeMode = System.Windows.Forms.TabSizeMode.Fixed
        Me.DrawMode = TabDrawMode.OwnerDrawFixed
        Me.Multiline = False
        Me.Dock = DockStyle.Fill
    End Sub

 

    ' 탭을 그린다.
    Private Sub DrawOnTab(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles Me.DrawItem

        ' 표시할 타이틀을 결정한다.
        Dim title As String = Me.TabPages(e.Index).Text

        ' 그리고자 하는 사각형의 경계를 나타낸다.
        Dim r As Rectangle = Me.GetTabRect(e.Index)

        Dim titleBrush As Brush = New SolidBrush(Color.Black)
        Dim f As Font = Me.Font

        ' 그림을 그린다.
        e.Graphics.DrawString(title, f, titleBrush, New PointF(r.X + TabPageTitleMargin, r.Y + TabPageTitleMargin))
        e.Graphics.DrawImage(CloseImg, New Point(r.X + CloseImgLocationX, CloseImgLocationY))

    End Sub

 

    ' 닫기 버튼을 클릭하면 페이지를 닫는다.
    Private Sub CloseTabPage(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseClick

        ' 닫기 이미지의 영역을 확인한다.
        Dim r As Rectangle = Me.GetTabRect(Me.SelectedIndex)
        r.Offset(CloseImgLocationX, CloseImgLocationY)
        r.Width = CloseImg.Width
        r.Height = CloseImg.Height

        ' 클릭한 곳이 받기 영역에 포함되어 있다면 탭 페이지를 제거한다.
        If (r.Contains(e.Location)) Then
            Dim tp As TabPage = Me.TabPages(Me.SelectedIndex)
            Me.TabPages.Remove(tp)
        End If

    End Sub

 

End Class

 

 

나타난 결과는 다음과 같다.

 

 

 

 

 

'VB.NET 2008 > VB - 컨트롤' 카테고리의 다른 글

컨트롤 - ErrorProvider 구성 요소  (0) 2011.04.25
컨트롤 - TabControl 컨트롤  (0) 2011.04.25
컨트롤 - DataGrid 컨트롤  (0) 2011.04.25
컨트롤 - ProgressBar 컨트롤  (0) 2011.04.25
컨트롤 - TreeView 컨트롤  (0) 2011.04.25