2010-08-11 38 views
2

我有一個帶有兩個選項卡的選項卡控件。這兩個選項卡都有獨特的控件,但有一個控件我希望始終顯示在當前活動的選項卡上。如何始終在TabControl的當前活動選項卡上顯示控件?

我想我只需要添加一些代碼到TabControl1_SelectedIndexChanged()

我試圖

MyControl.Parent = TabControl1.TabPages(
          TabControl1.TabPages.IndexOf(TabControl1.SelectedTab)) 
     MyControl.Parent.Update() ' is this necessary? 

,我也試過

TabControl1.TabPages(
TabControl1.TabPages.IndexOf(TabControl1.SelectedTab)).Controls.Add(SeMyControl) 

但既不工作(控制移動一次,但是當我回到原來的標籤,控制並沒有出現在那裏。

谷歌上搜索發現有人暗示

TabControl1.TabPages(TabControl1.TabIndex).Controls.Add(MyControl) 

但是看起來有些狡猾,因爲控件永遠不會從舊標籤中刪除,所以重複切換可能會多次添加控件。

我覺得我很接近,但並不完全......我該怎麼做呢?

回答

1

沒有,因爲Controls.Add被工作正常()更改Parent屬性。它會自動從它之前的標籤頁中刪除它。一個控件實例只能有一個父對象。

更直接的方法是簡單地將而不是放在標籤頁上的控件,但保留爲低Z型的窗體,所以它總是在標籤控件的頂部。唯一的問題是設計師會麻煩你。當您將它移到標籤頁控件的頂部時,它會自動將控件吸入到標籤頁中。解決這個問題的一個技巧就是將其從Tab控件中移開,並在窗體構造函數中更改其Location屬性。

+0

+1聽起來不錯,謝謝。我想我也可以,正如你所說的那樣,將它從標籤控件中刪除並在窗體構造函數中更改它的Location屬性,或者根本沒有它在設計器中,並在窗體構造函數中動態構造它。 – Mawg 2010-08-11 14:55:01

+0

沒關係,別忘了SetChildIndex()將它移到前面。 – 2010-08-11 14:58:04

1

使用你關心的第二個代碼片段,因爲它不會將它從原始選項卡中刪除,爲什麼不將它從原始選項卡中刪除,然後將它添加到新選項卡中?

也許是這樣的:TabControl1.TabPages(TabControl1.TabIndex).Controls.Remove(MyControl)

+0

+1好的,我會試試看,回覆你。棘手的部分是要知道哪個標籤是舊的,但我可以繞過 MyControl.Parent.Controls.Remove(MyControl) – Mawg 2010-08-11 14:52:58

+0

是的,我明白你的意思了。我想你可以遍歷標籤並檢查:TabPage.Contains(MyControl)。如果確實如此,請將其刪除並將其添加到新激活的頁面。 – TaylorOtwell 2010-08-11 18:18:17

相關問題