Bonjour à tous,
Voilà, suite à un problème que j’ai rencontré et auquel j’ai finalement trouvé une solution, je me permets de poster une source ici, car je pense que ma solution pourra (je l’espère !) aider également d’autres personnes.
En fait, le problème pourrait se résumer ainsi :
« Comment faire pour empêcher l’utilisateur de cliquer sur une page (TabPage) d’un TabControl ? »
J’ai recherché des solutions sur ce site et n’ai malheureusement rien trouvé de satisfaisant pour résoudre mon problème particulier. (Bon, ok, j’avoue, mon temps de recherche se compte plus en minutes qu’en heures, et si j’avais approfondi un peu plus ma recherche j’aurai peut-être trouvé une solution, m’enfin...)
C’est pourquoi je poste ici ma 1ère source, alors soyez indulgents svp ! ;)
Je suis loin d’être une professionnelle, je ne suis qu’étudiante ; donc il est fort possible que ma solution soit loin d’être la plus adaptée, ni la plus efficace ; mais en l’occurence, elle fonctionne, et c’est déjà pas mal ! ;)
Pour expliquer plus clairement le problème je vais vous donner l’exemple de mon application.
Suite à un exercice donné en cours, j’ai créé une application toute simple permettant d’ajouter un employé, d’afficher les informations concernant tous les employés et de calculer leur salaires. Le but de l’exercice était juste de nous familiariser avec les collections (arraylist) ainsi que la lecture/écriture de fichiers avec les classes StreamReader et StreamWriter.
Je n’ai pas besoin de rentrer plus dans les détails car cela n’aura pas d’intérêt pour la suite ; mais en gros, j’ai décidé d’utiliser le composant « TabControl » dans « Windows Forms » (petite précision : j’utilise la version anglaise de Visual Studio et je ne suis pas sûre de la traduction pour la version française donc je laisse comme ça, mais je pense que vous voyez de quoi je parle) pour mon « Menu ».
J’ai ajouté 4 « TabPages » (onglets) dans ce TabControl :
- tabHome (la page d’accueil),
- tabAdd (pour ajouter un employé),
- tabDisplay (pour afficher les informations concernant un employé en le choisissant dans une liste, et pour le modifier/supprimer),
- tabPayroll (pour afficher le salaire de chaque employé dans une liste)
Mon problème est survenu lors de la programmation du bouton « Modify » pour modifier les informations d’un employé. En effet, un clic sur le bouton modifier provoque la disparition de celui-ci, l’apparition de boutons « Save » et « Cancel », la possibilité d’écrire dans les textbox et l’interdiction de cliquer ailleurs que sur Sauvegarder ou Annuler.
D’où mon problème : l’utilisateur se trouvant dans la page tabDisplay décide de sélectionner un employé et de le modifier, mais au lieu de choisir Sauvegarder ou annuler, il clique finalement sur un autre onglet de mon menu.
Je ne voulais pas que cela soit possible avant d’avoir soit sauvegardé, soit annulé les modifications éventuelles.
Durant mes recherches pour résoudre le problème et ainsi empêcher le clic sur un onglet (et donc l’affichage de celui-ci) j’ai trouvé diverses solutions :
> mettre la propriété « enabled » de la page onglet à « false »
Résultat : on peut toujours cliquer sur l’onglet et la page s’affiche, mais tous ses composants sont « disabled ». => ne marche pas
> appeller la procédure « Hide » ou bien mettre la propriété « Visible » à « false » de la page onglet
Résultat : on peut toujours cliquer sur l’onglet, mais tous les composants de cette page ont disparus. => ne marche pas
> utiliser la méthode « Remove » du TabControl pour enlever la TabPage, puis « Add » pour la rajouter une fois les modifications faites
Résultat : supprime carrément la page et en rajoute une vierge => ne marche pas DU TOUT
> sélectionner la TabPage sur laquelle on veut rester avec TabControl.SelectedTab
Résultat : y’a de l’idée, (et d’ailleurs, c’est ce qui m’a mis sur la voie) mais incomplet
Voici donc, après tout ce blablabla, MA solution.
L’idée est de déclarer une variable globale (c’est à dire, au début du code et qui pourra être utilisée partout dans le code) booléenne, qui en gros permettra oui ou non de cliquer sur d’autres onglet que celui où je suis.