기본으로 제공되는 TabControl 개체를 사용하면 TabPage의 닫기 버튼이 없다.
받기 버튼을 만들기 위해서는 TabControl의 DrawMode를 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 |