2016-12-14 94 views
1

我試圖在用戶選擇不同的標籤頁時在3個標籤頁之間移動3個控件。他們是一個工具欄控件,一個richtextbox控件和一個組合框控件。在標籤頁之間移動控件

富文本框和組合框將根據選定的標籤頁分配一些屬性的新值,但工具條應該是相同的,但它的方法(這是一種典型的字體樣式處理工具條)應該影響richtextbox,僅在當前的頁面上可見。

現在,因爲更改組合框的顯示值也意味着當前tabpage上的richtextbox將爲其文本屬性分配一個新值,我不想爲每個場合創建3個組合框和50個richtextboxes 。我想創建它們中的一組,並在使用引發事件之前將它們的值保存在某種類型的字符串集合中,即更改組合框顯示的項目或更改Tabpage。

沒有做這個,我讀這 http://www.vbforums.com/showthread.php?478602-2005-Move-controls-From-One-Tab-Page-To-Another這表明爲其創造機會,這似乎是荒謬的,我控制之前...

我現在的情況是,我在tabpage1通過設計師與顯示控制然後我改變標籤時試圖像這樣

Private Sub TabPage_Enter(sender As Object, e As EventArgs) Handles TabPage1.Enter, TabPage2.Enter, TabPage3.Enter 
    Select Case DirectCast(sender, TabPage).Name 

     Case "Tabpage1" 
      TabPage1.Controls.Add(RichTextBox1) 
      TabPage1.Controls.Add(ToolStrip1) 
      TabPage1.Controls.Add(ComboBox1) 

     Case "TabPage2" 
      TabPage2.Controls.Add(RichTextBox1) 
      TabPage2.Controls.Add(ToolStrip1) 
      TabPage2.Controls.Add(ComboBox1) 

     Case "TabPage3" 
      TabPage3.Controls.Add(RichTextBox1) 
      TabPage3.Controls.Add(ToolStrip1) 
      TabPage3.Controls.Add(ComboBox1) 

    End Select 
End Sub 

現在,控件將出現在tabpage2和tabpage3但tabpage1保持爲空。我試圖在表單加載事件中做這件事

TabPage1.Controls.Add(RichTextBox1) 
TabPage1.Controls.Add(ToolStrip1) 
TabPage1.Controls.Add(ComboBox1) 

但仍然tabpage1保持爲空時切換回其視圖。我不知道我正在嘗試的是我想要做什麼,但是我明白,對於這種方法,我不應該使用設計器,而只是在代碼處理大小和位置時自己創建控件。如果有這樣做的「正確」方式,請提供建議,主要是爲了保持代碼簡潔和整齊。 TIA。

ps.在寫這篇文章時,我意識到我可以在每個tabpage的設計器中只創建每個控件的三個,然後用我想到的字符串集合方式處理組合框更改。看起來足夠明智,但我仍然想知道這一點,因此我仍然在問這個問題。

+2

在您的case語句中,「Tabpage1」應該有一個大寫的「P」,以匹配您的TabPage1名稱嗎? –

+0

這是很好的發現,我正在尋找一個錯字,但因爲我關注的排序數字1,2,3我沒有注意到:D – kokotas

+0

所以顯然現在控件出現在第一個選項卡上(該死的我檢查了3在發佈這篇文章之前,我沒有發現錯字):P但是我想知道當我在tabpage上添加控件時,每次輸入事件觸發時會發生什麼?這是做到這一點的方式嗎?我想我會發現,而我正在與我的代碼進展。但是,如果有更好的方法,請將其添加爲答案,或者回答一個關於持續添加控件會發生什麼的信息。 TIA – kokotas

回答

2

這是一個可能的解決方案,用於在標籤之間移動時移動控件 它假定您的控件已經創建過一次。

Private Sub TabControl1_Click(sender As Object, e As EventArgs) Handles TabControl1.Click 

    Try 

     Dim tabCtrl As TabControl = DirectCast(sender, TabControl) 
     Dim tabPageItem As TabPage = tabCtrl.SelectedTab 
     moveControl(MobileButton, tabPageItem) 

    Catch ex As Exception 

     MessageBox.Show(String.Concat("An error occurred:", ex.Message)) 

    End Try 

End Sub 

Private Sub moveControl(controlToMove As Control, newTab As TabPage) 

    Dim findButton() As Control = newTab.Controls.Find(controlToMove.Name, True) 

    If findButton.GetUpperBound(0) < 0 Then 

     controlToMove.Parent = newTab 

    End If 

End Sub 
+0

這是一個真正的控制移動,相比,我正在嘗試...... pff非常感謝你,這實際上解決了我的問題,我上面描述了容器的崩潰與控件寬度混淆。謝謝你的幫助安德魯! – kokotas