2014-03-27 78 views
0

我有一個選項卡控件,我可以在其中添加新的標籤頁,在文本框中鍵入要爲每個標籤顯示的名稱。我想要做的是能夠右鍵單擊一個選項卡並重命名它(以允許我編輯文本),就像許多其他應用程序中的選項一樣......我已經有一個「刪除選項卡」選項,工作,但我找不到方法來重命名所選標籤..C# - 在運行時編輯標籤頁的文本屬性

任何幫助非常感謝!

這是我刪除選項代碼,如果可以在任何幫助..

public Form1() 
    { 
     InitializeComponent(); 
     ContextMenu cm = new ContextMenu(); 
     cm.MenuItems.Add("Remove", new EventHandler(rmv_click)); 
     cm.MenuItems.Add("Rename"); 
     tabControl1.ContextMenu = cm; 


    } 
//select tab on right mouse click 
     private void tabControl_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Right) 
      { 
       for (int i = 0; i < this.tabControl1.TabCount; ++i) 
       { 
        if (this.tabControl1.GetTabRect(i).Contains(new Point(e.X, e.Y))) 
        { 
         this.tabControl1.SelectedIndex = i; 
         break; 
        } 
       } 
      } 
     } 

//remove selected tab 
    private void rmv_click(object sender, System.EventArgs e) 
    { 
     tabControl1.TabPages.Remove(tabControl1.SelectedTab); 
    } 

回答

2

你可以做這樣的:(快速和骯髒的)

public Form1() 
     { 
      InitializeComponent(); 
      ContextMenu cm = new ContextMenu(); 
      cm.MenuItems.Add("Remove", new EventHandler(rmv_click)); 
      cm.MenuItems.Add("Rename", new EventHandler(rename_click)); 
      tabControl1.ContextMenu = cm; 
     } 

     //select tab on right mouse click 
     private void tabControl_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Right) 
      { 
       for (int i = 0; i < this.tabControl1.TabCount; ++i) 
       { 
        if (this.tabControl1.GetTabRect(i).Contains(new Point(e.X, e.Y))) 
        { 
         this.tabControl1.SelectedIndex = i; 
         break; 
        } 
       } 
      } 
     } 

     //remove selected tab 
     private void rmv_click(object sender, System.EventArgs e) 
     { 
      tabControl1.TabPages.Remove(tabControl1.SelectedTab); 
     } 

     //rename selected tab 
     private void rename_click(object sender, System.EventArgs e) 
     { 
      var showDialog = this.ShowDialog("Tab Name", "Rename the selected tab"); 
      tabControl1.SelectedTab.Text = showDialog; 
     } 

     public string ShowDialog(string text, string caption) 
     { 
      Form prompt = new Form(); 
      prompt.Width = 500; 
      prompt.Height = 150; 
      prompt.Text = caption; 
      Label textLabel = new Label() { Left = 50, Top = 20, Text = text }; 
      TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 }; 
      Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70 }; 
      confirmation.Click += (sender, e) => { prompt.Close(); }; 
      prompt.Controls.Add(confirmation); 
      prompt.Controls.Add(textLabel); 
      prompt.Controls.Add(textBox); 
      prompt.ShowDialog(); 
      return textBox.Text; 
     } 

學分ShowDialog方法來Bas Brekelmans。原稿可以發現here

+0

謝謝你的答案,工作正常:) 但我正在尋找一個解決方案,直接編輯名稱,而無需打開新窗口。無論如何,我會用你的解決方案來繼續其他功能,當我有時間的時候,我會更深入地研究它。 –