[英]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.