Bonsoir, je cherche a faire un switch case en fonctions de l'UserControl présent dans un panel de mon MainForm, mais j'y arrive pas, auriez vous une idée de comment procéder ?
Version imprimable
Bonsoir, je cherche a faire un switch case en fonctions de l'UserControl présent dans un panel de mon MainForm, mais j'y arrive pas, auriez vous une idée de comment procéder ?
Pour répondre strictement à ta question bien que ce ne soit pas la solution la plus élégante :
En C# 7, tu dois pouvoir faire ceci :
Avant C# 7, tu dois passer par une structure if..else if...else classique.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 switch (userControl) { case MyUserControl1 uc1: DoSomething(); break; case MyUserControl1 uc2: DoSomethingElse(); break; case null: throw new ArgumentNullException(); break; default: throw new UnknownUserControlException(); break; }
Sinon, une solution plus élégante est de créer une classe UserControlBase héritant de UserControl dans laquel tu déclare une méthode abtraite DoSomething();
Tous tes UserControl devront alors hériter de UserControlBase au lieu de UserControl et surcharger la méthode DoSomething.
Et ensuite à partir de ton MainForm, il suffira d'appeler userControl.Domething() quelque soit le UserControl derrière.
Bonjour et merci pour ta réponses, j'ai pas tout bien compris, ça fait que quelques jours que j'ai commencé le C# et même pas 2 mois le codage, en tant qu'autodidacte donc 0 connaissance en bagage au départ.
Mais je vais chercher plus en profondeur en suivant la piste que tu m'as fournit.
Merci encore.
Si tu découvres le développement, tu vas galérer avec la réponse que t'ai faite puisqu'elle repose sur des notions de POO.
Le Net fourmille de tutos sur la POO dans tous les langages possibles et imaginables.
Commence par en lire quelques un, mon approche te sembleras moins obscure
Effectivement, j'ai pas toutes les notions encore, c'est bien pour ça que j'ai pas tout saisi ce que tu m'as dis, mais je me doutes bien qu'il existe déjà des explications plus claire de ce que tu me dis, c'est pour ça que je ne t'ai pas demandé d'approfondir, faut bien que je me débrouille un peu par moi même ;).
Merci encore pour cette précision sur la piste à suivre (POO).
Edit : le pire c'est que si cela se trouve j'ai déjà fait ce genre de chose (j'ai codé un bot discord en JS
Edit2 : ok je commence à comprendre, merci
J'ai créé la class héritant de usercontrol, j'y ai déclarer une méthode doSomethings() et là je suis bloqué, déjà si je mets abstract entre public et void il me mets une erreur :
Ensuite j'ai pas compris ce que je dois mettre dans la méthode, mon switch case ?Code:
1
2
3
4
5
6
7
8 class UCBase : UserControl { public void DoSomethings() { } }
Parce qu'au final comment il va savoir ce qu'il doit afficher quand j'appuis sur mon boutton ?
Et quand je veux modifier l’héritage de mes usercontrol il me met également une erreur.
Code:
1
2
3
4
5
6
7
8 public partial class Info1 : UCBase { public Info1() { InitializeComponent(); } }
Le problème de départ est : que souhaites-tu faire sur ces contrôles ? :)
(j'ai rarement eu besoin de faire un switch/case sur des contrôles dans une liste de contrôles, c'est pour ça ;) )
Je suis en train de développer une sorte d'installateur, j'ai des boutons précédent et suivant et je cherche donc à afficher les pages suivantes ou précédente en fonction de la page actuelle ou autres conditions, j'ai réussi à faire ce que je voulais avec des if else mais je me demandais comment je pouvais exporter cette fonction pour alléger mon MainForm.cs et surtout comment transformer mon if else en switch case.
Ok, donc tu veux faire une navigation !
De mon côté, j'aurai plus fait :
- Une Form qui possède les boutons previous/next avec un conteneur qui contient un UserControl
- Des UserControl au lieu des Form qui définit quel est son précédent et son suivant
- Une classe de base qui gère previous/next (qui retourne quel UserControl à afficher), dont chaque UserControl hérite
je suis pas sûr que ça puisse fonctionner dans mon cas, sur ma première page, j'ai 3 choix possible représenté par des boutons, selon le choix fait, j'ai une 2 ème page différente, puis quand on cliques sur suivant, la 3 ème page est identique quelque soit le choix, donc faut qu'en faisant précédent on revienne sur la bonne 2ème page.
ce que j'ai fais, j'ai mis sur mom form mes 3 boutons, et les boutons précédent suivant, le suivant en non visible et le précédent au milieu en bas avec écrit quitter et un panel container pour les autres pages.
quand on clique sur un choix ça ouvre la page correspondante (qui est un usercontrol) et en même temps ça définit une variable c à 0, 1 ou 2 selon le choix, le bouton suivant apparaît et le précédent se décale pour être bien placé et le texte change en Précédent, quand on clique sur suivant ça affiche la 3ème page et si on reclique sur précédent ça affiche la bonne deuxième page en vérifiant via la variable c quelle page afficher.
Par contre j'ai un petit soucis, je souhaite faire une application autonome.
j'ai essayé de publier mon application pour la tester sur un autre ordi voir si mon problème d'ouverture de lien venait de mon ordi.
pour commencer je suis obligé de faire publier avec le paramètres dépendant du framework sinon j'ai une erreur.
Et quand je veux la lancer sur un autre ordi il me dit que j'ai besoin de .netcore.
je veux faire un petit générateur que tu a juste besoin de télécharger, tu rentres les paramètres de générations tu génères et voilà, rien de plus à installer même pas le générateur.
vers quoi je devrais me tourner ?
Je me suis finalement tourné vers le Python qui je pense sera plus adapté à mes projets