2014-10-11 192 views
0

我正在製作一個需要添加或刪除選項卡(選項卡控制)的應用程序。我已經完成添加和刪除標籤,但我有自定義按鈕,而不是使用標籤。 (點擊時,此按鈕會去的第一個標籤頁):如何添加和刪除C#中的「自定義」選項卡

//This will make it go to TAB 1 
    private void button1_Click(object sender, EventArgs e) 
    { 
     tabControl1.SelectedIndex = 0; 
    } 

    //This will change the MOUSEENTER to the correct image 
    private void button1_MouseEnter(object sender, EventArgs e) 
    { 
     button1.MouseEnter += new EventHandler(button1_MouseEnter); 
     this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.Tab_Down)); 
    } 
    //This will change the MOUSELEAVE to the correct image 
    private void button1_MouseLeave(object sender, EventArgs e) 
    { 
     button1.MouseLeave += new EventHandler(button1_MouseLeave); 
     this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.Tab_Norm)); 
    } 

不過,我將如何創建它,所以當你點擊「添加標籤」按鈕,它會創建一個新的標籤,但它也創造了一個新的按鈕其中例如有tabControl1.SelectedIndex = 1;

編輯

我已經這樣做了添加一個新的標籤(tabControl1):

private void button2_Click(object sender, EventArgs e) 
    { 
     string title = "TabPage " + (tabControl1.TabCount + 1).ToString(); 
     TabPage myTabPage = new TabPage(title); 
     tabControl1.TabPages.Add(myTabPage); 
    } 

這增加了精細的現有頂部的新標籤。但我該怎麼做,這樣它也創建了一個新的按鈕,上面的按鈕的屬性,但它使得它,而不是tabControl1.SelectedIndex = 1;它確實tabControl1.SelectedIndex = 3;,每次我添加一個新標籤時上升? - 謝謝

回答

3

這幾個更新後,這是我的答案的新版本。它表明你如何

  • 添加Button增加了一個新的TabPages而選擇其
  • 充分利用Tab控制繪製關閉「X」字符每個標籤的右側,如Firefox或Visual Studio這樣做。

添加Button就像你想要的,也許文本=「+」和高度像標籤的高度。它自動定位在選項卡上。如果您的Tab被移動或調整大小,您可能需要重新定位它。

在事件Tab設置爲OwnerDrawFixed和每個網頁上的文本是由幾個空格追加以騰出空間給關閉X。該代碼創建一個類變量closeX來保存當前的x-rectangle並在MouseClick事件中對其進行測試。

確保連接tabControl1_DrawItemtabControl1_MouseClick事件!

private void cb_addPage_Click(object sender, EventArgs e) 
    { 
     string title = "TabPage " + (tabControl1.TabCount + 1).ToString() + " "; 
     TabPage myTabPage = new TabPage(title); 
     tabControl1.TabPages.Add(myTabPage); 
     tabControl1.SelectedTab = myTabPage; 
    } 


    private void Form1_Load(object sender, EventArgs e) 
    { 
     tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; 
     cb_addPage.Top = tabControl1.Top; 
     cb_addPage.Left = tabControl1.Right - cb_addPage.Width; 
     foreach (TabPage tp in tabControl1.TabPages) tp.Text += " "; 
    } 


    Rectangle closeX = Rectangle.Empty; 

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     Size xSize = new Size(13,13); 
     TabPage tp = tabControl3.TabPages[e.Index]; 
     e.DrawBackground(); 
     using (SolidBrush brush = new SolidBrush(e.ForeColor) ) 
       e.Graphics.DrawString(tp.Text+ " ", e.Font, brush, 
            e.Bounds.X + 3, e.Bounds.Y + 4); 

     if (e.State == DrawItemState.Selected) 
     { 
      closeX = new Rectangle(
       e.Bounds.Right - xSize.Width, e.Bounds.Top, xSize.Width, xSize.Height); 
      using (SolidBrush brush = new SolidBrush(Color.LightGray)) 
       e.Graphics.DrawString("x", e.Font, brush, 
             e.Bounds.Right - xSize.Width, e.Bounds.Y + 4); 
     } 

    } 

    private void tabControl1_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (closeX.Contains(e.Location)) 
      tabControl1.TabPages.Remove(tabControl1.SelectedTab); 
    } 

如果你想使用圖片來裝飾標籤,包括與您的形式一個ImageList,與圖像(S)加載它,如果關閉按鈕是第一形象,改變這樣的代碼:

if (e.State == DrawItemState.Selected) 
    { 
     closeX = new Rectangle(e.Bounds.Right - xSize.Width - 3, 
           e.Bounds.Top + 5, xSize.Width, xSize.Height); 
     e.Graphics.DrawImage(imageList1.Images[0], closeX, 
          new Rectangle(0,0,16,16), GraphicsUnit.Pixel); 
    } 

我追加標籤的截圖有幾頁

owner drawn tab with closing button

而一個使用此enter image description here關閉按鈕圖像:

enter image description here

更新:請注意,如果您TabPage包含IDisposable對象,你應該確保他們都讓你刪除的頁面之前處置!示例代碼見here

+0

對啊,我很高興我能夠做到這一點。非常感謝,我知道我問了很多,但我想我可以改變按鈕和旁邊的X的圖片? - 謝謝 – Bittenfleax 2014-10-11 18:09:22

+0

在代碼中,它們都是文本。是的,你可以改變它,但它需要了解Graphics.DrawImage(而不是DrawString)的細節來將'x'更改爲圖像。但是:看看VS和FF!他們看起來就像它。有一段時間,使用紅色X的圖像被使用,但今天事情變得更加緩和。 – TaW 2014-10-11 18:15:24

+0

非常感謝您的幫助。它現在工作正常,但是如果你正在做它,我怎麼能創建一個新的標籤,其上的內容,例如,每個創建的標籤在同一個地方有一個按鈕,它是同一個按鈕。有沒有辦法複製它?謝謝 – Bittenfleax 2014-10-11 22:05:38

相關問題