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 :

Revenir à une form


Sujet :

C#

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut Revenir à une form
    Bonjour
    J'ai une forme principale Form1 et une secondaire Form2

    Dans Form1:
    J'affiche par un webbrowser une page web, puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Form2 f2=new Form2();
    f2.show()
    Dans f2:
    Je développe un programme et si je veux faire référence à la Form1
    - si j'écris il me dit que Form1 n'existe pas
    - si je crée une nouvelle instance de la Form1 alors je perd l'ancienne instance avec son webbroser et ses procédures.
    Comment rappeler l'instance de Form1 qui contient le webbroser et la page web affichée?
    Cordialement.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    ton instance s'appelle f1 et non Form1

    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut Suite
    Non l'instance f1 n'a pas été créée depuis Form2.
    f1 n'existe pas.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Le sujet a déjà été traité maintes fois. Normalement, faire référence à l'instance de Form1 depuis Form2 est à éviter : Form1 ayant créé une instance de Form2, Form1 connait Form2 mais l'inverse non. Il y a d'autres façons de faire notament via les évènements (Form1 s'abonne à un event de Form2 et donc sera notifié par Form2 lorsque cela sera nécessaire). Maintenant, si tu veux absolument le faire, tu peux passer une référence de Form1 dans le constructeur de Form2.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    Merci pour cette première réponse.
    Je n sais pas ce qu'est un évènement.
    Le code est-il simple?
    Cordialement.

  6. #6
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Il faut également modifier l'accesseur du webbrowser, qui est normalement en private si tu as utilisé le designer, pour le mettre en public.
    Mais rassure moi, tu fais du developpement perso et pas du pro? Non parceque sinon je plains le prochain .

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    Oui je me suis présenté comme débutant, je suis un particulier et non un pro
    - à "star": Je ne comprend pas, f1 n'est pas le parent de f2 ...
    -à "ericlm128": "owner" n'est pas écris dans mon bouquin, et ce code ne marche pas. Je voudrais appeler la Form1
    ...?

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    Citation Envoyé par mecyber25 Voir le message
    Oui je me suis présenté comme débutant, je suis un particulier et non un pro
    - à "star": Je ne comprend pas, f1 n'est pas le parent de f2 ...
    -à "ericlm128": "owner" n'est pas écris dans mon bouquin, et ce code ne marche pas. Je voudrais appeler la Form1
    ...?
    Effectivement, la solution de star ne fonctionne pas, comme tu le dis, f1 n'est pas le parent de f2. Cela fonctionnerait pour un Control posé sur une form.
    En revanche, la solution de ericlm128 fonctionne : Msdn Form.Owner

    Qu'entends-tu par "ce code ne marche pas" ? Quand tu affectes f2.Owner avec this dans form1, cela signifie que la propriété Owner de f2 correspond à form1.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    C'est trop confus dans ma tête
    Dans ma procédure dans Form1 j'ai
    Je vais dans Form2, f2 n'existe pas, je le remplace par this.
    Dans Form2:
    ne marche pas car dans Form2 l'instance f1 n'existe pas.
    Que dois-je écrire?

  12. #12
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Citation Envoyé par mecyber25 Voir le message
    Que dois-je écrire?
    Je pense qu'avant d'écrire, tu devrais commencer par lire ... un cours...
    Effectivement c'est très confus dans ta tête.

    - f1 est une instance de la classe Form1,
    - f1 créé f2 qui est une instance de la classe Form2,
    - this représence l'instance de la classe dans laquelle il est utilisé.
    - Form2 ne connait pas Form1 donc ne peux pas fonctionner.

    En revanche le code précédent dans Form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form2 f2 = new Form2(){ Owner = this };
    f2.show();
    permettra dans Form2 d'utiliser la propriété Owner qui représente l'instance de Form1 (Owner étant de type Form je crois, il faudra explicitement le transtyper en Form1 pour accéder aux méthodes publique de Form1)

    L'autre solution que j'indiquais précédement (que je trouve moche mais qui fonctionnera) serait d'ajouter une référence de Form1 dans le constructeur de Form2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private Form1 F1;
    public Form2(Form1 f1)
    {
       F1 = f1;
       InitializeComponent();
    }
    et donc dans Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form2 f2 = new Form2(this);
    f2.Show();

  13. #13
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Plus simplement : ton deuxième formulaire Form2 DOIT connaitre Form1. Dans ce cas, dans le constructeur de Form2 tu indiques l'instance de Form1 :

    Dans Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form2 f2 = new Form2(this);
    Dans Form2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    private Form1 _F1;
    public Form2(Form1 F)
    {
       _F1 = F;
    }

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    Désolé mais c'est encore plus confus et
    (Form1).Owner ne me donne pas accès aux méthodes de Form1.
    J'aurais aimé lire un cours simple et limpide
    Cordialement.

  15. #15
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Citation Envoyé par mecyber25 Voir le message
    Désolé mais c'est encore plus confus et
    (Form1).Owner ne me donne pas accès aux méthodes de Form1.
    J'aurais aimé lire un cours simple et limpide
    Cordialement.
    Alors utilise la méthode de l'instance passée dans le constructeur que nous t'avons fournie ZenZiTone et moi-même.
    Concernant les cours, ils pullulent sur la toile et sur ce site...

  16. #16
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par mecyber25 Voir le message
    J'aurais aimé lire un cours simple et limpide
    Ben pourquoi tu ne le fais pas ?

    http://tahe.developpez.com/tutoriels-cours/csharp2008/

    https://dotnet.developpez.com/cours/...sharp#dotnetcs

    https://dotnet.developpez.com/cours/...harp#winformcs

    https://www.google.fr/?gws_rd=ssl#q=apprendre+le+c%23
    C'est bizarre, le troisième lien mène vers developpez.com, je ne comprends pas pourquoi...

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    -à "ericlm128": "owner" n'est pas écris dans mon bouquin, et ce code ne marche pas. Je voudrais appeler la Form1
    ...?
    Moi c'est écrit dans le mien ici :
    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

  18. #18
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

    Dans f1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form2 f2=new Form2();
    Form2.Parent = this;
    f2.show();
    Dand f2 utiliser Owner pour accéder au parent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1 f1 = (Form1)(This.Owner);

Discussions similaires

  1. [VB6] [Excel] Feuille dans une form, sans excel installé
    Par ro2v dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 05/05/2010, 12h45
  2. Revenir d'un Canvas dans une Form
    Par Laupif dans le forum Java ME
    Réponses: 0
    Dernier message: 04/01/2010, 11h31
  3. Réponses: 4
    Dernier message: 26/05/2009, 11h41
  4. [VB6] masquer la barre de titre d'une form
    Par tiboleo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/12/2002, 17h54
  5. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 03h51

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