2016-12-14 13 views
1

Я пытаюсь переместить 3 элемента управления среди 3-х таблеток, когда пользователь выбирает другую вкладку. Это элемент управления toolsrtip, элемент управления richtextbox и элемент управления combobox.Перемещение элементов управления среди табуретов

В richtextbox и combobox будут назначены новые значения для некоторых из их свойств в зависимости от выбранной вкладки, панель инструментов должна быть одинаковой, но ее методы (это типичная панель управления стилями шрифта) должны влиять на richtextbox, который является видимый только на текущей закладке.

Теперь, поскольку изменение отображаемого значения выпадающего списка также означает, что richtextbox на текущей вкладке будет оценивать новое значение для его текстового свойства, я не хотел создавать как 3 comboboxes и 50 richtextboxes для каждого случая , Я хочу создать только один набор из них и сохранить их значения в некотором типе коллекции строк до того, как в результате использования произойдет событие, которое либо изменит отображаемый элемент со списком, либо изменит вкладку.

Не сделав это, прежде чем я прочитал эту 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 остается пустым, когда возвращается к его просмотру. Я не уверен, что я хочу сделать, но я понимаю, что для этого подхода я вообще не должен использовать конструктор и вместо этого создаю элементы управления только в области обработки и размера кода. Пожалуйста, совет, если есть «правильный» способ сделать это, главным образом для того, чтобы держать код коротким и аккуратным. ТИА.

ps.As я писал это я понял, что я мог бы создать только три из каждого элемента управления в дизайнере для каждой вкладки, а затем обработать изменение combobox с набором строк, который я имел в виду. Кажется разумным, но я все еще хочу знать об этом, поэтому я все еще задаю этот вопрос.

+2

В случае, если «Tabpage1» имеет прописную букву «P» в вашем случае, в соответствии с вашим именем TabPage1? –

+0

Это было хорошо замечено, я искал опечатку, но поскольку я сосредоточился на сортировочном номере 1,2,3, я не заметил: D – kokotas

+0

Итак, очевидно, что элементы управления отображаются на первой вкладке (черт возьми, я проверил 3 раз, прежде чем делать это сообщение, и я не заметил опечатку): P Но мне интересно, что именно происходит, когда я добавляю элемент управления на вкладке, каждый раз, когда срабатывает событие ввода? Это способ сделать это? Думаю, я узнаю, пока я продвигаюсь с моим кодом. Но если есть лучший способ, добавьте его в качестве ответа или ответьте информативным сообщением о том, что происходит при непрерывном добавлении элемента управления. 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