2016-12-14 2 views
1

J'essaie de déplacer 3 contrôles parmi 3 onglets lorsque l'utilisateur sélectionne un onglet différent. Ils sont un contrôle toolrtip, un contrôle richtextbox et un contrôle combobox.Déplacer les contrôles parmi les onglets

Les nouvelles valeurs de certaines propriétés seront affectées à richtextbox et à combobox en fonction de la page sélectionnée, la barre d'outils doit être la même, mais ses méthodes (type de police typique) doivent affecter la zone de texte riche visible sur l'onglet actuel uniquement. Maintenant, parce que changer la valeur d'affichage d'une combobox signifie aussi que la zone richtext de la page courante sera assortie d'une nouvelle valeur pour sa propriété text, je ne voulais pas créer 3 comboboxes et 50 richtextboxes pour chaque occasion . Je veux en créer un seul ensemble et conserver leurs valeurs dans un certain type de collection de chaînes avant que les utilisations ne soulèvent un événement, c'est-à-dire soit changer l'élément affiché de la liste déroulante, soit changer la page.

Ne pas avoir fait cela avant d'avoir lu ce http://www.vbforums.com/showthread.php?478602-2005-Move-controls-From-One-Tab-Page-To-Another qui suggère de créer un contrôle pour son occasion, ce qui semble absurde me ...

Ma situation actuelle est que j'ai les contrôles d'affichage à TabPage1 par concepteur puis j'ai essayé quelque chose comme ça

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 

maintenant, en cas de changement des onglets, les commandes apparaissent sur TabPage2 et tabpage3 mais TabPage1 reste vide. J'ai essayé de le faire à l'événement de chargement de formulaire

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

mais toujours tabpage1 reste vide lorsque vous revenez à sa vue. Je ne suis pas sûr que ce que j'essaie est ce que je veux faire, mais je comprends que pour cette approche je ne devrais pas utiliser de concepteur du tout et créer plutôt les contrôles seulement dans la taille et le lieu de manipulation de code moi-même. Veuillez nous conseiller s'il y a une "bonne" façon de procéder, principalement pour garder le code court et bien rangé. TIA.

ps.Comme j'écrivais ceci, j'ai réalisé que je pouvais créer seulement trois de chaque contrôle dans le concepteur pour chaque onglet et ensuite gérer le changement de combobox avec la collection de chaînes que j'avais en tête. Semble assez sensé mais je veux toujours savoir à ce sujet, d'où je pose toujours cette question.

+2

Est-ce que "Tabpage1" doit avoir un "P" majuscule dans votre déclaration de cas, pour correspondre à votre nom TabPage1? –

+0

Cela a été bien repéré, je cherchais une faute de frappe, mais parce que j'étais concentré sur le numéro de tri 1,2,3 je n'ai pas remarqué: D – kokotas

+0

Alors évidemment les contrôles apparaissent maintenant sur le premier onglet (putain j'ai vérifié 3 fois avant de faire ce post et je n'ai pas repéré la faute de frappe): P Mais je me demande ce qui se passe exactement quand j'ajoute le contrôle sur la page, chaque fois que l'événement se déclenche? Est-ce la façon de le faire? Je suppose que je vais le découvrir pendant que je progresse avec mon code. Mais s'il y a un meilleur moyen, veuillez l'ajouter comme réponse, ou répondez par un message informatif sur ce qui se passe avec l'ajout continu du contrôle. TIA – kokotas

Répondre

2

Voici une solution possible pour déplacer votre contrôle lorsque vous progressez entre les onglets Il suppose que votre contrôle a déjà été créé une fois.

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

vrai déplacement des commandes, par rapport à ce que j'essayais ... pff Merci beaucoup, cela a résolu même les problèmes que j'avais, que je décris plus haut, où l'effondrement du conteneur gâchait avec les largeurs des contrôles. Merci pour l'aide Andrew! – kokotas