选项卡控制选项卡按钮位置

本文关键字:选项 位置 控制 按钮 | 更新日期: 2023-09-27 18:22:30

我正在为我的问题寻找解决方案。我想更改tabcontrol的TabButtons的位置,或者添加分配给tabpage但在tabcontrol之外的控件。选项卡页面是动态添加的。示例:

Form1___________ _ [] X
_______________________
Some TabPage content
Tab1 | Tab2 | Tab3 | < >
TextBox assigned to Tab's
________________________

因此,如果我通过单击Tab1Tab2Tab3来更改选项卡,TabPage+TextBox的内容应该会根据选项卡而更改。第一个想法是将TabButtons放在底部,并添加包含TextBox内容的ArrayList,捕捉TabControl更改选项卡事件并更改TextBox内容,但编辑和添加该内容时出现问题。简而言之:我不想把TabButtons放在两个控件之间(例如两个文本框之间)。你有什么想法吗?

选项卡控制选项卡按钮位置

如果我理解你的要求。。。你想当你点击一个选项卡时,它控制两个不同的东西吗?像两个不同的文本框?如果这是真的,你应该可以这样做。

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。

您可以创建自己的文本框类,该类继承自文本框类:

class MyOwnTextBox:TextBox
{
  public int parent_tab;
}

因此,您可以通过为文本框分配parent_tab id来添加文本框。因此,在选项卡按钮点击事件中,您可以执行类似的操作:

foreach(MyOwnTextBox txt in this.Controls)
{
   if(txt.parent_tab==1) txt.visible=false;
}

您也可以将选项卡放置在选项卡控件的左侧或右侧。这并不完美,但与将它们放置在选项卡控件上方或下方相比,更接近您的想法。

你可以像这个一样动态添加一个新的选项卡页面

tabControl1.TabPages.Add("My new Tab");

我不确定我是否完全理解你想要做什么。如果你想从另一个对象更改选项卡,只需使用:

 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.
 }