Comment puis-je savoir dans quel onglet vous vous déplacez d'un/dans un WinForms onglet contrôle?
J'ai besoin de déterminer qui de l'onglet, l'utilisateur vient et va, quand ils changer d'onglet, et éventuellement annuler le commutateur. J'ai essayé la Désélection, Désélectionnée, la Sélection, la sélection des événements, et tous montrent l'e.TabPageIndex être le même que celui de l'expéditeur.SelectedIndex.
Est-il un événement, ou bien, que je peux utiliser de sorte que je peux déterminer les deux côtés de ce, ou dois-je hack quelque chose ensemble, avec la mise en cache à partir d'un événement et d'utiliser cette valeur dans le nouvel événement.
Je suis en train d'essayer d'éviter de manipuler la Désélection/Désactivée événements et la mise en cache de la valeur à utiliser dans la Sélection de l'événement. Je sais déjà que je peux le faire, donc je demande si il y a une manière plus propre, sans le faire.
J'ai essayé dans les deux C# et VB, avec les mêmes résultats (pas de surprise).
Grâce.
OriginalL'auteur Rick Mogstad | 2009-08-24
Vous devez vous connecter pour publier un commentaire.
Il ne ressemble pas du tout un argument d'événement permettra de porter les détails de la précédente et actuelle onglets, de sorte que vous aurez besoin pour gérer un couple d'événements à suivre.
Au minimum, vous devez utiliser le
Deselected
événement pour stocker une référence à la version précédemment onglet sélectionné. Vous pouvez toujours interroger le TabControl pour son onglet en cours. Pour aller un peu plus loin, vous pouvez également gérer lesSelected
de l'événement pour suivre l'onglet en cours.Il ne regarde pas comme le stock de WinForms TabControl prend en charge tout ce que vous êtes après, vous pouvez l'étendre à fournir les informations que vous êtes après, ou vous pouvez utiliser une 3ème partie TabControl (je pense que Infragistics prend en charge le comportement que vous êtes en train de regarder)
OriginalL'auteur STW
Je crois que l'e.Annuler le drapeau dans la sélection d'évènement doit faire ce truc. Cela envoie l'onglet sélectionné en arrière à l'original sur annuler:
Si vous avez vraiment besoin de plus complexe beharvior, sous-classer le contrôle d'onglet de travail, Puis remplacer le onSelecting méthode. Cela ne devrait pas être fait à la légère. Si le contrôle est modifiée dans le futur, vous aurez de code cassé. Et vous devez confirmer que tous les comportements de l'onglet de contrôle sont remplies (c'est à dire les constructeurs ...)
EDIT: sur la base des commentaires. Cela va à l'interne de la piste de l'onglet d'origine avant de la choisir.
OriginalL'auteur MarcLawrence
Vous pouvez vous abonner à TabControl.En désélectionnant. Quand il se déclenche, l'onglet index dans l'événement args sera l'ancien indice.
Vous pouvez ensuite vous abonner à TabControl.Sélectionné. Lorsque cet événement se déclenche, l'onglet index est l'index de la nouvelle onglet sélectionné.
Oui. Il n'y a aucun évènement qui a à la fois l'onglet index disponibles, malheureusement.
OriginalL'auteur Reed Copsey
Vous pourriez faire quelque chose comme ça :
OriginalL'auteur Thomas Levesque
Vous pouvez obtenir l'index de l'onglet, l'utilisateur s'éloigne de la Désélection de l'événement et de le stocker dans une variable pour l'utiliser plus tard:
Vous souhaitez mettre un code pour empêcher le commutateur de Sélection de l'événement. Voici un exemple dans VB.NET qui va vous empêcher de sélectionner l'onglet 2 sur un onglet de contrôle:
J'ai mis à jour ma réponse, mais j'ai ensuite lu dans un autre commentaire, vous ne voulez pas avoir à mettre en cache la valeur de l'onglet en cours. Je ne sais pas de toute autre manière.
OriginalL'auteur raven
Pour fournir une alternative à ma première réponse.... voici un exemple d'une longue TabControl qui modifie les arguments de l'événement pour plus de détails.
Avertissement C'est giflé ensemble, il va avoir besoin de quelques réglages pour sûr!
...et un exemple de Formulaire à l'aide de ce contrôle...
encore du travail depuis l'ombre des types d'événements d'étendre les types utilisés par le type de base; les méthodes qui fonctionnent avec elle comme un TabControl n'aurait tout simplement pas voir les propriétés supplémentaires.
Le code que c'est utilisé dans un cadre de soutien à d'autres développeurs, donc je suis un peu limité dans ce que je peux faire sans casser le code existant. Merci encore pour vos réponses.
OriginalL'auteur STW
Le tabControl est un non-membre du public "lastSelection" qui a l'info que vous voulez. Malheureusement, je ne vois pas un moyen de l'obtenir. C'est très frustrant quand ils ont ce que vous voulez, mais ne laissez pas que vous l'utilisez.
OriginalL'auteur JustHelping
Essayer dans la Deselect_Event:
OriginalL'auteur Jed Monsanto