2017-02-09 11 views
2

Visual Basicでこのクラスを作成しましたが問題なく動作しますが、わずかなdesign issueがあります。あなたはこの小さなばかが見えますが、どうすればこの問題を解決できますか?また、コンテンツボックスと選択メニューの間隔を修正する方法もあります。カスタムコントロールの表示問題

Public Class VerticallTabControll 
    Inherits TabControl 

    Sub New() 
     SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True) 
     DoubleBuffered = True 
     SizeMode = TabSizeMode.Fixed 
     ItemSize = New Size(30, 170) 
    End Sub 

    Protected Overrides Sub CreateHandle() 
     MyBase.CreateHandle() 
     Alignment = TabAlignment.Left 
    End Sub 

    Protected Overrides Sub OnPaint(e As PaintEventArgs) 
     Dim selected As New SolidBrush(Color.FromArgb(0, 122, 204)) 
     Dim notSelected As New SolidBrush(Color.FromArgb(63, 63, 70)) 



     Dim B As New Bitmap(Width, Height) 
     Dim G As Graphics = Graphics.FromImage(B) 




     G.Clear(Color.FromArgb(63, 63, 70)) 

     For i = 0 To TabCount - 1 
      Dim TabRectangle As Rectangle = GetTabRect(i) 



      If i = SelectedIndex Then 
       '// if tab is selected 
       G.FillRectangle(selected, TabRectangle) 
      Else 
       '// tab is not selected 
       G.FillRectangle(notSelected, TabRectangle) 
      End If 

      'Line Test 
      'Dim start As New Point(10, 31 * (i + 1)) 
      'Dim ende As New Point(160, 31 * (i + 1)) 
      'G.DrawLine(Pens.White, start, ende) 


      G.DrawString(TabPages(i).Text, Font, Brushes.White, TabRectangle, New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}) 

     Next 

     e.Graphics.DrawImage(B.Clone, 0, 0) 
     G.Dispose() : B.Dispose() : selected.Dispose() : notSelected.Dispose() 

     MyBase.OnPaint(e) 
     e.Dispose() 
    End Sub 
End Class 
+1

あなたは「bumb」によって何を意味するのか明確にすることはできますか?正確にディスプレイについて好きではないですか? – user3697824

+0

内容とメニューの高さが違う。 – Ramog

+0

解決したい問題が表示されないユーザーのリストに私を追加してください。 'e.Dispose()'を呼び出さずにDrawStringの代わりにTextRenderer.DrawTextを使用してください。 – LarsTech

答えて

0

あなたはそれに応じて内部空間を調整するためにDisplayRectangleプロパティをオーバーライドしてみてください:

Public Overrides ReadOnly Property DisplayRectangle As Rectangle 
    Get 
    Return New Rectangle(MyBase.DisplayRectangle.Left, 
         MyBase.DisplayRectangle.Top - 2, 
         MyBase.DisplayRectangle.Width + 2, 
         MyBase.DisplayRectangle.Height + 4) 
    End Get 
End Property 
+0

ありがとうございました:) – Ramog