簡體   English   中英

如何在啟動時設置TabPage?

[英]How To Set TabPage on start?

我有一個帶有三個TabPages的TabControl。 應用程序的初始啟動始終打開左側的第一個TabPage。 對我來說,有必要設置起始TabPage(例如第二個)。

當然,我知道在開始時更改選項卡的可能性如下:

tabControl.SelectedTab = tabPage;
tabControl.SelectTab(tabPage);
...

但是這段代碼也會激活其他事件,如TabControl.Selecting,TabControl.Deselecting,TabControl.SelectedIndexChanged等。 - 我真的想提前阻止它。

我正在尋找的是TabControl中的某種屬性,如“StartingTabPageIndex” - 將其設置為1將在啟動時打開第二個TabPage而不調用任何不必要的事件。

您應該從設計器中刪除與事件處理程序的綁定,並在設置初始標簽頁后添加它們

在設計器中刪除它們之后(這不會刪除事件處理程序代碼)在設置所需的tabpage后重新綁定表單load事件中的事件處理程序

 tabControl.SelectedTab = tabPage;
 tabControl.Selected += tabControl_Selected;
 .... and so on for the other events to handle....

另外一個選項。 進入表單設計器,將SelectedIndex屬性從0更改為1:

// 
// tabControl1
// 
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Location = new System.Drawing.Point(223, 21);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 1;      //  <--   This Line
this.tabControl1.Size = new System.Drawing.Size(300, 143);
this.tabControl1.TabIndex = 3;

事件處理程序尚未連接,並且對設計器中的TabControl進行任何修改似乎不會影響該屬性。 以這種方式改變它似乎是安全的。

更新

我只做了一個簡單的測試,並且SelectedTab不起作用,因為它希望在set上創建句柄。

然而,這似乎工作:

public class MyTabControl : TabControl
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    [Browsable(true)]
    public new int SelectedIndex
    {
        get { return base.SelectedIndex; }
        set { base.SelectedIndex = value; }
    }
}

您現在可以在設計器中看到SelectedIndex並可以設置它。 它不會更改設計器中的可見選項卡,但會存儲“初始選項卡索引”(從零開始)。

它確實更改了SelectedIndex ,但它沒有調用事件,因為事件是在設計器的序列化中最后分配的,因此在更改之前永遠不會分配它們。

一種選擇是將SelectedTab序列化。 您只需要從TabControl派生自己的自定義TabControl,並具有以下內容:

public class MyTabControl : TabControl
{
  [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
  public new TabPage SelectedTab {
    get { return base.SelectedTab;  }
    set { base.SelectedTab = value; }
  }
}

這樣你就可以讓你的設計師選擇SelectedTab作為初始。

我沒有對此進行測試,但理論上認為它應該可以工作:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM