2010-02-24 7 views

답변

9
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) 
     { 

      Graphics g = e.Graphics; 
      Brush _TextBrush; 

      // Get the item from the collection. 
      TabPage _TabPage = tabControl1.TabPages[e.Index]; 

      // Get the real bounds for the tab rectangle. 
      Rectangle _TabBounds = tabControl1.GetTabRect(e.Index); 

      if (e.State == DrawItemState.Selected) 
      { 
       // Draw a different background color, and don't paint a focus rectangle. 
       _TextBrush = new SolidBrush(Color.Blue); 
       g.FillRectangle(Brushes.Gray, e.Bounds); 
      } 
      else 
      { 
       _TextBrush = new System.Drawing.SolidBrush(e.ForeColor); 
       // e.DrawBackground(); 
      } 

      // Use our own font. Because we CAN. 
      Font _TabFont = new Font(e.Font.FontFamily, (float)9, FontStyle.Bold, GraphicsUnit.Pixel); 
      //Font fnt = new Font(e.Font.FontFamily, (float)7.5, FontStyle.Bold); 

      // Draw string. Center the text. 
      StringFormat _StringFlags = new StringFormat(); 
      _StringFlags.Alignment = StringAlignment.Center; 
      _StringFlags.LineAlignment = StringAlignment.Center; 
      g.DrawString(tabControl1.TabPages[e.Index].Text, _TabFont, _TextBrush, 
         _TabBounds, new StringFormat(_StringFlags)); 

     } 
+0

그냥 다음과 같이 추가하십시오 : 영향을받는 컨트롤의'DrawMode'는'TabDrawMode.OwnerDrawFixed'로 설정되어야합니다. 이것은'DrawItem' 이벤트를 사용하도록합니다 (이 메소드의 코드를 비워두면 탭의 제목 표시 줄도 비어있게됩니다) – DrCopyPaste

3

Winforms에서 DrawMode를 변경하고 모든 캡션을 직접 페인트 할 수 있습니다.

MSDN Example을 참조하십시오.

관련 문제