Explication commande d'ouverture seconde Form

Signaler
Messages postés
9
Date d'inscription
lundi 14 décembre 2009
Statut
Membre
Dernière intervention
21 janvier 2010
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
Bonjour en cherchant a ouvrir une 2eme form j ai trouver ma solution mais je ne comprends son fonctionnement quelqu'un pourrait il m'eclairer sur le pourquoi du comment?
GenF est lenom de ma Form2 evidemment

Ce code marche :

GenF Form2 = new GenF();
Form2.Show();


mais la logique semblerait de plutot faire ceci qui pourtant ne fonctionne pas

Form2 GenF = new Form2();
GenF.Show();

4 réponses

Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Salut !

Dans ton premier cas, ce n'est pas un form que tu crée, mais un objet de type GenF, nommé Form2.

Dans ton deuxième cas, ce n'est pas un form que tu crée, mais un objet de type form2 nommé GenF.
Form2 hérite peut être de Form ? Dans ce cas, il hérite aussi de ses méthodes + attributs :
public partial class Form2 : Form
{
public Form2()
{
}
}

Si tu veux un form :

Form F = new Form()
F.Show();

A+
Messages postés
9
Date d'inscription
lundi 14 décembre 2009
Statut
Membre
Dernière intervention
21 janvier 2010

Salut, c est ce que j essayais de dire en fait avec le code que tu m as donner et qui correspond a mon 2eme exemple ca fonctionne mais pas vraiment car la forme s ouvre mais sans afficher de contenu alors qu avec le premier exemple ca fonctionne parfaitement .. mais je ne comprends pas pourquoi justement ;)
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Un objet de type Form est simplement un conteneur.
Si l'objet que tu veux créer possède du contenu, c'est certainement un objet qui hérite de Form.

Exemple :
public partial class Form2 : Form
{
private int Nb_Boutons;

public Form2(int N)
{
this.Nb_Boutons = N;
}

}

Dans cet exemple Form2 hérite de la classe Form.
C'est certainement un objet de type Form2 que tu veux instancier.

Dans ce cas :

Form2 F = new Form2(5);
F.Show();  
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
Salut

Le fonctionnement des fenêtres est généralement assez déroutant au début.
Quand on programme de l'orienté objet, on a l'habitude de faire un truc du genre :
// Code ne servant que d'exemple 
// (ne fonctionne évidemment pas car les classes n'existent pas)
Fenetre maFenetre = new Fenetre();
maFenetre.MettreUnBoutonIci();
maFenetre.MettreUnBoutonLà();
//...


Mais cependant, ce n'est généralement pas comme ça qu'on crée des fenêtres.
En fait, on crée une classe qui hérite de fenêtre qui place tous les éléments de la fenêtre. Puis on instancie cette classe de fenêtre perso sous forme d'un objet :

class MaClasseFormPerso : Form
{
    public MaClasseFormPerso()
    {
        InitializeComponent();
        // Cette méthode (générée automatiquement par le mode design)
        // permet de placer les composants dans ta fenêtre lors de son instanciation
        // (Puisqu'on se trouve dans le constructeur)
    }
}

Et donc, quand tu voudras créer une fenêtre de type maClasseFormPerso :
MaClasseFormPerso monObjetFenetre = new MaClasseFormPerso();
monObjetFenetre.Show();
// L'intérêt est que tu peux créer plusieurs pages ayant exactement la même interface :
MaClasseFormPerso monAutreObjet = new MaClasseFormPerso();
monAutreObjet.Show();
// Là, tu auras 2 fenêtres indépendantes (puisque 2 objets différents)
// Mais qui auront la même apparence (puisque classe identique)


Donc si tu dis que ça ça marche :
GenF Form2 = new GenF();
Form2.Show();

C'est que tu as créé une CLASSE GenF qui hérite de Form, et que tu as créé un objet (que tu as appelé Form2) qui instancie cette fenêtre.
Si tu t'embrouilles, c'est qu'il faut que tu donnes de meilleurs noms.
Dans ce code :
GenF est le TYPE de ta fenêtre
Form2 est un nom que tu donnes à ton OBJET, ta fenêtre en elle-même.

Exemple de meilleur nom (un peu long mais c'est pour que tu comprennes bien) :
FenetreLogin loginALOuvertureDeLApplication = new FenetreLogin();
loginALOuvertureDeLApplication.Show();


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -