IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

bonne pratique : comment recuperer facilement tout les informations d'un winform


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut bonne pratique : comment recuperer facilement tout les informations d'un winform
    Bonjour,

    Je suis débutant dans la programmation de client lourd, et encore plus sur winform.

    J'ai essayé de trouver sur le net, la bonne pratique pour la récupération de l'ensemble des valeurs d'un form.
    Hormis Find qui semble correspondre a ce que je cherche, j'ai pas vraiment trouver d'infos.
    Le problème avec find c'est que cela devient assez chaotique a gérer lorsqu'on a beaucoup de controls identiques.

    Pour illustrer ma situation, voici une petit description de mon context projet.
    Mon formulaire comporte deux tabpages (dans un tabcontrol évidement).
    Les informations que je veux récupérer sont contenus dans le deuxième onglet.

    J'ai concu cet onglet avec un contenu partiellement dynamique.
    Certains controls existent mais ne sont affichés que sur demande, d'autres sont ajoutés par du code.
    Comme type de control on retrouve du textbox, du listbox, du checkbox, du radio box, un tabcontrol et plusieurs usercontrol.
    Cet onglet correspond en fait un écran de configuration.
    En fonction des choix de l'utilisateurs, certains élément s'affiche ou sont ajouté.
    Enfin une fois que l'utilisateur a fini, il peut sauvegarder cette configuration sous forme d'un fichier xml.
    Le fichier xml devant respecter une structure prédéfinit.


    Voici ce que ca donne :



    Après cette petite introduction, voila ma demande, connaissez vous une bonne pratique pour faire ce que je désire.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 119
    Points
    25 119
    Par défaut
    pas sur de comprendre parfaitement ce que tu veux ...

    sur ce genre d'interface chiante il suffit de faire un morceau de code par type de validation voulue

    donc si c'est un combobox qui dans un cas dit qu'un textbox et pas affiché et pas un autre il faut faire un traitement différent pour chaque possibilité
    via un select case la valeur du combobox par exemple

    ensuite le plus simple est de faire une sub par possibilité


    par contre si tu les conditions et les données sont toujours les meme, autant poser tous les controles plutot que de les instancier à la volée
    possibilité de faire des usercontroles par type, pour ne gérer qu'une visibilité au lieu de toutes les combinaisons de controles

    sinon, un controle instancié pendant l'execution, tu peux garder une référence sur lui pour le rappeler (variable, voir meme dans une collection)
    sinon tu lui donnes un name et tu fais un cast sur me.controls(nomducontrole)


    après, y a aussi wpf (<> de winforms) qui soulagerais un peu le développement je pense

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse Sperot51,
    mais effectivement je me suis mal expliqué.
    Pour la partie dynamique, se fut un peu galere mais ca fonctionne bien

    Maintenant je suis bloqué sur la partie récupération des infos.
    Quand l'utilisateur clique sur Enregistrer, l'application doit récupérer tout les infos de l'onglet, a savoir les valeurs de tout les contrôles, pour ensuite les sauvegarder en xml.

    Mon souci étant que je ne sais vraiment pas comment mis prendre.
    Par exemple comme aller cherche la valeurs des controles de mon onglet configuration commune ?
    le seul moyen que j'ai trouvé c'est de taper directement ongletConfigCommune.controls.find("nom du controls", false)
    Ca, ca fonctionne, le souci c'est que les onglets Part 1, Part 2, Part 3 etc, n'existe pas, ils sont rajouter par du code. Donc je peux pas utilisé ongletPart1.controls.find.

    Je sais pas si je suis tout a fait clair :p et je m'en excuse, il n'est pas facile de penser conception client lourd quand ca fait 10 ans qu'on ne fait plus que du client léger.

    En fait pour moi cet écran, je l'ai conçu comme un formulaire web (attention, ya pas de notion client serveur, c'est juste une image), et le bouton enregistrer correspond a un bouton submit et donc récupérer la valeur de tout mes controles comme je le ferais avec la valeurs de tout mes champs en html.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 119
    Points
    25 119
    Par défaut
    tes onglets instanciés à l'exeucution sont aussi accessibles
    tabcontrol.tabpages() de permet d'avoir accès aux onglets, puis tu peux refaire ton .find surement
    sinon vu que tu les instancies, tu peux les garder en référence
    exemple avec t as tabcontrol
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim p as new tabpage
    t.tabpages.Add(p)
    ici p est le tabpage, donc tu peux le mettre dans une variable de classe ou dans une collection avec les autres ... (voir un system.collections.generic.dictionary())

    enfin je comprends ton soucis, c'est d'ailleurs courageux de passer sur du client lourd, moi on me demanderais de faire du client léger, je vomirais quelques heures de suite lol
    après je ne peux pas te dire si ton interface est la plus adaptée, ne connaissant pas le cahier des charges ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    hehe

    Donc, pour acceder facilement a mes controles le seul moyen est bien de passer par find.

    Je vais devoir prendre mon mal en patience alors :p

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 119
    Points
    25 119
    Par défaut
    à mon avis y a quand meme beaucoup mieux, genre des héritages avec une fonction saveXML dans une classe qui aurait elle même créée l'interface graphique ...

    j'ai déjà fait un formulaire de saisie automatique (qui créé des tas de controles différents selon ce qu'on doit y mettre dedans) et j'ai aucun accès aux controles par leur nom ...
    (et pourtant je vérifie si le remplissage est obligatoire, s'il est correct etc...)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ah oui pas mal, un peu comme le toString()
    Mais bon la c'est un peu trop tard.
    En tout cas si un jour je refais un truc du style, je tacherais de m'en souvenir, ca peut être rudement pratique.

    Merci pour les infos et bonne journée

  8. #8
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Citation Envoyé par sperot51 Voir le message
    à mon avis y a quand meme beaucoup mieux, genre des héritages avec une fonction saveXML dans une classe qui aurait elle même créée l'interface graphique ...
    On peut aussi définir une classe qui correspond à l'objet affiché (en l'occurence ici c'est du paramétrage) et utiliser le databinding avancé pour afficher ou non les controls nécéssaires à partir d'un bindingsource sur cette classe. De ce fait, on peut facilement lier la logique de présentation à la cohérence interne des propriétés de la classe tout en étanchéifiant la couche de présentation de la couche "métier".


    Cdt.

Discussions similaires

  1. Récuperer tout les informations contenu dans ma JSP
    Par skillipo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 19/02/2008, 16h34
  2. Réponses: 2
    Dernier message: 04/01/2008, 07h42
  3. Réponses: 10
    Dernier message: 04/09/2007, 13h38
  4. Réponses: 15
    Dernier message: 26/06/2007, 16h36
  5. Les fichiers .INI, lire toutes les informations d'une section
    Par echap2000 dans le forum C++Builder
    Réponses: 9
    Dernier message: 15/05/2006, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo