Расположение кнопок вкладки TabControl - PullRequest
1 голос
/ 04 февраля 2012

Я ищу решение для моей проблемы. Я хочу изменить расположение TabButtons tabcontrol или добавить элемент управления, назначенный для tabpage, но вне TabControl. TabPages добавляются динамически. Пример:

Form1___________ _ [] X

_______________________

Some TabPage content

Tab1 | Tab2 | Tab3 | < >

TextBox assigned to Tab's
________________________

Так что, если я изменю вкладки нажатием Tab1, Tab2, Tab3, содержимое TabPage + TextBox должно измениться в зависимости от Tab. Первой идеей было поместить TabButtons внизу и добавить ArrayList, содержащий содержимое TextBox, перехватить событие TabControl change tab и изменить содержимое TextBox, но возникла проблема с редактированием и добавлением этого содержимого. В двух словах: я не хочу помещать клавиши Tab между двумя элементами управления (например, между двумя текстовыми полями). У вас есть какие-нибудь идеи?

Ответы [ 4 ]

1 голос
/ 04 февраля 2012

Если я понимаю, что вы просите ... Вы хотите, когда вы нажимаете на вкладку, она контролирует две разные вещи? Как два разных текстовых поля? Если это правда, вы должны сделать это следующим образом.

foreach (thing in your ArrayList)
{
     TabPage tabPage = new TabPage("Name of tab");            // Add a new tab page
     RichTextBox rtb = new System.Windows.Forms.RichTextBox();//RTF box
     TextBox tb = new System.Windows.Forms.TextBox();         //Text box

     //Set up size, position and properties
     rtb.LoadFile("some/Path/to/a/file");

     //set up size, position of properties
     tb.Text = "Some text I want to display";

     tabPage.Controls.Add(rtb); //Add both boxes to that tab
     tabPage.Controls.Add(tb);

     tabControl1.TabPages.Add(tabPage); //Add that page to the tab control
}

Единственное, с чем вам придется возиться, это макет. И обязательно добавьте tabControl вместе с дизайнером.

1 голос
/ 04 февраля 2012

вы можете создать свой собственный класс текстового поля, который наследуется от класса текстового поля:

class MyOwnTextBox:TextBox
{
  public int parent_tab;
}

Таким образом, вы можете добавить свое текстовое поле, присвоив ему идентификатор parent_tab. так что в случае нажатия кнопки вкладки, вы можете сделать что-то вроде этого:

foreach(MyOwnTextBox txt in this.Controls)
{
   if(txt.parent_tab==1) txt.visible=false;
}
0 голосов
/ 04 февраля 2012

Вы также можете разместить вкладки слева или справа от элемента управления вкладками.Это не идеально, но может быть ближе к вашей идее, чем размещение их над или под элементом управления вкладками.

Вы можете динамически добавить новую вкладку, например,

tabControl1.TabPages.Add("My new Tab");
0 голосов
/ 04 февраля 2012

Я не уверен, что точно понимаю, что вы пытаетесь сделать.Если вы хотите изменить вкладку из другого объекта, просто используйте:

 TabController.SelectTab(0);

Если вы хотите удалить TabPage и добавить его к другому, используйте:

 TabController.Controls.Remove(TabPage1);
 TabController2.Controls.Add(TabPage1);

Редактировать: Отчитайте дальше, я думаю, вы хотите что-то вроде этого:

 this.TabController.ControlAdded += AddLinksToBottomOfTabs;
 public void mainSettingsTabController_ControlAdded(object sender, ControlEventArgs e)
 {
     //Create label with e.Control.Name as the title and 
     //add it to wherever you want it added.
 }
...