Comment ajouter de nouveaux onglets à un TabControl et être en mesure de mettre à jour les contrôles en eux?
Je dois être capable de programmation pour créer de nouveaux onglets sur un TabControl, ajouter des contrôles à eux, et être en mesure de mettre à jour les contrôles de chaque onglet à partir d'une autre fonction. J'ai déjà une fonction pour ajouter des onglets à la commande, et à ajouter des contrôles à ces onglets lorsqu'ils sont créés, mais je suis coincé à mettre à jour les contrôles après qu'ils ont été créés.
EDIT: C'est ce que j'ai à faire les onglets et ajoutez les contrôles:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tabpage As New TabPage
tabpage.Text = "(empty)"
Dim textbox1 As New TextBox
Dim textbox2 As New TextBox
textbox1.Parent = tabpage
textbox2.Parent = tabpage
textbox1.Location = New Point(10, 10)
textbox2.Location = New Point(10, 30)
TabControl1.TabPages.Add(tabpage)
End Sub
Urgh. Je n'arrive pas à obtenir de nouveau dans le compte que j'ai utilisé pour poster cette question, donc je dois poster mon suivi de Tim question dans les commentaires pour la réponse précédente comme une nouvelle réponse.
Debug.WriteLine(TabControl1.TabPages.Item(2).Controls.Find("textbox1", True).Count)
retourne 0. L'onglet, et les contrôles ont été créés avant.
- Poster le code que vous avez actuellement permettra à d'autres programmeurs pour vous donner un plus de réponse définitive. En général, je pensais que vous seriez en mesure de simplement référence à la / les commande(s) en question par le biais de l'onglet conteneur, mais je ne fais pas les WinForms très souvent, et que vous n'avez pas utilisé l'Onglet contrôle depuis .NET 1.0.
- J'ai mis à jour le post avec le code que j'ai. Les commentaires ne sont pas comme moi.
Vous devez vous connecter pour publier un commentaire.
Ok - je vais donner un coup de feu, mais je suis vraiment rouillé avec WinForms, un peu moins rouillé avec VB.NET. Vous aurez besoin pour localiser le contrôle que vous souhaitez mettre à jour, et vous devriez être en mesure de le faire par le biais de la
Controls
collecte du conteneur approprié - dans ce cas, le plus probable d'unTabPage
:Syntaxe pourrait être légèrement décalé, mais j'espère que cela permettra au moins de vous diriger dans la bonne direction.
Voir De contrôle.ControlCollection.Méthode Find
Mis à JOUR
Hans Passant suggéré que cela ne fonctionne pas parce que vous n'avez pas configuré l'
Name
bien (je suppose qu'il veut dire le nom des champs, pas la page de l'onglet). J'ai fait un peu plus de lecture sur leControlsCollection.Find
méthode, et MSDN dit "les Recherches pour les contrôles par leur Nom de la propriété et construit un tableau de toutes les commandes du match". Vous (et moi) ont essayé de trouver la commande par le nom de l'instance (textbox1, textbox2) - qui sont le instance noms pour les deux commandes, le contrôle noms.Alors essayez plutôt ceci:
Ensuite, vous pouvez trouver le contrôle à l'aide:
Donner un essai et voir si cela fonctionne pour vous. La clé (et ce que j'ai remarqué en regardant ton code, hier soir, il était passé mon coucher pour moi) était il y a maintenant moyen d'identifier le contrôle dans le
Find
méthode.Dim tb1 As TextBox = CType(TabControl1.TabPages.Item(TabControl1.TabPages.Count - 1).Controls.Find("textbox1", True)(0), TextBox)
tb1.text = "Test"
et je reçois un IndexOutOfRange exception. Savent pas pourquoi, il n'arrive pas à trouver la zone de texte là?TabControl1.TabPages.Count
et la.Controls.Find("textBox1", True)
de voir comment de nombreux éléments sont dans le ControlsCollection. Également vérifier votre orthographe du contrôle d'identité ne sais pas si VB.Net est sensible à la casse ou non sur les numéros.Debug.WriteLine("TabControl1.TabPages.Count: " & TabControl1.TabPages.Count)
etDebug.WriteLine("Control count: " & TabControl1.Controls.Find("textbox1", True).Count)
retourné cette: Contrôleonglet1.TabPages.Count: 3 compte de Contrôle: 0 Le cas est correct, et je ne sais toujours pas pourquoi il n'est pas de retourner quoi que ce soit.TabPage
? Vérifier.Controls.Count
. A laTabPage
et les contrôles en question a été créé avant la présente partie du code? (Je suppose qu'ils ont, juste vérifier l'évidence).Je sais que c'est vieux, mais juste un avis, écrire une fonction qui crée ET retourne le contrôle que vous souhaitez ajouter à l'élément tabpage. Dans ce cas, vous aurez une référence pour le contrôle à portée de main.
Par exemple:
Maintenant lorsque j'appelle cette fonction, je vais avoir la nouvelle zone de liste comme un objet: