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

C# Discussion :

Modifier une propriété d'une form dans une autre form


Sujet :

C#

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Modifier une propriété d'une form dans une autre form
    Bonjour tout le monde.

    Je recherche présentement à faire quelque chose qui était simple en Visual Basic, mais qui ne l'est plus du tout en C#, changer la propriété "Enabled" d'un bouton sur une form dans une autre form. J'ai fait des recherches sur Google un peu partout, et je n'ai rien trouvé qui fonctionnait correctement ou qui n'avait pas d'erreur.

    Je vous demande donc votre aide en espérant que vous pouvez résoudre mon problème. (Normalement, en Visual Studio, tout ce que j'aurais eu à écrire est Form1.button1.Enabled = true; mais là, sa ne fonctionne plus...)

    Merci!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Quel est l'erreur quand tu tentes de faire ça ?
    Tu n'arrives pas à trouver ta fenêtre ?
    Le Porc est un loup pour le Porc.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Oula il va falloir réviser un peu notamment sur tout ce qui est notion de portée (private, protected, public, ...).

    Si tu ne peux accéder à la propriété d'un form à partir d'un autre (on peut facilement généraliser la remarque aux classes) c'est que le bouton de la form est protected, il est possible de modifier sa portée en le passant public.
    Personnellement je n'aime pas trop modifier la portée des contrôles car c'est tout le contrôle qui passe à public, donc je passe soit par une méthode ou une propriété selon le cas.

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ce que je veux faire est assez simple.

    Tout d'abord, le jeu (oui, oui, c'est bien un petit jeu) que je programme a un menu principale avec la sélection du niveau dedans. Tous les boutons, sauf celui écrit "Niveau 1", sont Enabled = false. Quand tu cliques sur le bouton "Niveau 1", une nouvelle fenêtre ouvre (une form complètement différente) et le jeu se passe là. Une fois le niveau achevé, une popup apparaît pour te dire que t'as réussi, puis la fenêtre se ferme.

    Voilà ce que j'ai réussi à faire pour l'instant. Ce qu'il me reste à faire, c'est de dire à la fenêtre du menu principal de débloquer le bouton "Niveau 2" (Enabled = true) pour qu'il soit cliquable lorsque le niveau est complété dans la fenêtre du niveau. Est-ce possible? Si oui, j'aimerais bien connaître la solution, puisque je n'ai toujours pas trouvé. Merci de votre aide!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Facile :
    1 - Tu dois mettre la valeur de la propriété Modifiers de ton contrôle à Public
    2 - Dans ta seconde form, tu dois déclarer un objet du type de ta form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((form1)Application.OpenForms["form1"]).tonbouton.Enabled = false;
    Est-ce assez simple pour toi?

  6. #6
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par girouxv Voir le message
    Facile :
    1 - Tu dois mettre la valeur de la propriété Modifiers de ton contrôle à Public
    2 - Dans ta seconde form, tu dois déclarer un objet du type de ta form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((form1)Application.OpenForms["form1"]).tonbouton.Enabled = false;
    Est-ce assez simple pour toi?
    Sans vouloir vexer personne, il n'est pas nécessaire ni très bon de vouloir tondre le gazon avec une Ferrari. Et en ça je suis tout à fait d'accord avec ostenhard. Ne pas tout mélanger...
    Il faut bien savoir qui dirige quoi.
    La form principale n'a pas à se faire diriger par une form secondaire.
    Alors :
    - tu ouvres une form secondaire depuis ta form principale
    - tu peux le faire avec un ShowDialog qui te retournera un DialogResult
    - à partir de ce dialogResult tu peux déduire, dans ta form principale et au moment de la fermeture de ta form secondaire, quel niveau suivant tu peux rendre accessible au joueur.

    Tu peux très bien overrider (ou surcharger je ne sais plus) la fonction ShowDialog de ta form secondaire.

    Et il y a encore mille autre solutions avec lesquelles tu gardes une certaine cohérence dans ton code.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    J'ai pas de gazon à tondre c'est l'hiver chez-nous, mais avoir une Ferrari j'aimerais bien tondre avec

    Donc, on lâche les paraboles.

    La form principale n'a pas à se faire diriger par une form secondaire
    Pourquoi pas? Je me fais bien diriger par me femme à l'occasion c'est utile des fois. On parle d'un jeu ici non pas d'un logiciel qui sera vendu.

    tu peux le faire avec un ShowDialog qui te retournera un DialogResult à partir de ce dialogResult tu peux déduire, dans ta form principale et au moment de la fermeture de ta form secondaire, quel niveau suivant tu peux rendre accessible au joueur.
    C'est une façon, mais pas la réponse à sa question, imagine que le joueur doive revenir à la form principale, pas évident si tu es en showdialog.

    Bon assez de blablatage, je fais venir l'entrepreneur en pavage et j'enlève tout le gazon de mon terrain pour mettre de l'asphalte.

  8. #8
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Bon assez de blablatage, je fais venir l'entrepreneur en pavage et j'enlève tout le gazon de mon terrain pour mettre de l'asphalte.
    Si j'étais toi, j'essaierais de mettre une lame sous la Ferrari

    Plus sérieusement, pierro peut très bien
    - passer sa form principale en paramètre du Show de la form secondaire (owner)
    - déclarer dans sa form principale une fonction qui s'occupe de rendre enable ou disable les boutons en fonction d'un paramètre
    - appeler cette fonction à partir du owner de la form secondaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((FormPrincipale)owner).Mafonction(paramètre)

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par girouxv Voir le message
    Facile :
    1 - Tu dois mettre la valeur de la propriété Modifiers de ton contrôle à Public
    2 - Dans ta seconde form, tu dois déclarer un objet du type de ta form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((form1)Application.OpenForms["form1"]).tonbouton.Enabled = false;
    Est-ce assez simple pour toi?
    Effectivement, ce ne sera ni un jeu vendu, ni un jeu professionnel, juste un jeu pour tester ce que j'ai appris depuis le début.

    La méthode ci-dessus a fonctionné à merveille et je vous remercie tous pour m'avoir aidé. Je reviendrai sur ce forum si j'ai encore besoin d'aide. A++!

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Moi je crois que le plus pertinent c'est de definir une classe pouvant contenir tous les parametres susceptible d'affecter Form1 Form2 et accessoirement les resultat du jeux

    disons : C_Param

    Form1 qui appelle Form2 instancie cette classe avec les valeurs de départ
    Form1 appele le constructeur de Form2 en Passant C_Param
    Form2 Fait ce qu'elle veut avec C_Param
    Form1 garde la visibilité sur C_Param et en fait ce qu'elle veut
    Et si on veut rafiner, Form2 peut declancher un event pour informer Form1 que C_Param est modifié
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  11. #11
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par pierro118 Voir le message
    juste un jeu pour tester ce que j'ai appris depuis le début.
    Si c'est une histoire d'apprentissage, alors je te recommande la solution d'Olibara qui de loin est la meilleure et la plus pertinente....

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/01/2013, 10h44
  2. Réponses: 3
    Dernier message: 01/06/2010, 15h09
  3. Récupérer une propriété d'un control dans une DynamicResource
    Par Eggiz dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 04/05/2009, 14h48
  4. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 22h34
  5. Réponses: 2
    Dernier message: 20/06/2006, 08h22

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