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

VB.NET Discussion :

Probleme création instance Form [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 176
    Par défaut Probleme création instance Form
    Bonjour à tous,

    j'ai 2 Forms, Form1 et Form2. Dans chacune d'entre elles il y a une Sub nommée "SubTest".

    J'ai une 3eme Form a partir de laquelle je souhaiterais créer une instance de soit Form1,
    soit Form2, et je n'sais pas comment m'y prendre pour le faire avec une seule variable.
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim f As Form
     
    If...Then
    	f = New Form1
    Else
    	f = New Form2
    End If
     
    Call f.SubTest
    mais évidement ".SubTest" n'existe pas.

    Comment faire ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Le code que tu monstres est plausible.
    Mais peux-tu vérifier que les Sub sont bien déclarées FRIEND ou PUBLIC ?
    Si elles sont PRIVATE, normal que ça ne fonctionne pas.


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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il faut faire une interface
    une interface est un contrat qu'une classe doit respecter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface IFormWithSubTest
        Sub SubTest()
    end interface
    ensuite chaque form doit implémenter l'interface de la manière suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class Form1 implements IFormWithSubTest
    le fait d'implémenter l'interface va ajouter la méthode automatiquement (supprime ou renomme ta méthode actuelle pour ne pas interférer, puis colle le code dans la méthode créée)

    ensuite sur form3 il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim f As IFormWithSubTest
     
    If...Then
    	f = New Form1
    Else
    	f = New Form2
    End If
     
    f.SubTest()
    f sera à la fois un IFormWithSubTest et soit un form1 soit un form2 (directcast peut être utilisé pour caster sur une interface)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 176
    Par défaut
    @Phil Rob oui, les Sub sont bien Public.

    Merci Pol63 pour toutes ces infos.

    En fait j'ai juste remplacé

    par

    J'ai pas compris pourquoi, et ça m'embête un peu, mais ça fonctionne.

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Merci pour le feedback et tant mieux si tu es dépanné.

    Toutefois, déclarer un objet de type Object n'est jamais une bonne chose.

    Mais es-tu vraiment obligé d'instancier tes Form ?

    Le code suivant devrait fonctionner aussi et il ne serait pas le plus mauvais si tu n'as pas besoin de plusieurs instances simultanées du même Form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' ************* Dim f As Form
     
    If...Then
    	' f = New Form1
      Form1.SubTest
    Else
    	'  f = New Form2
      Form2.SubTest
    End If
     
    ' Call f.SubTest
    Bonne soirée,


  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 176
    Par défaut
    Form1 et Form2 (en fait il y en a d'autres) correspondent a des types de fichier à ouvrir.
    J'ai fait une Form pour chaque types de fichiers gérés. Et toutes ces Forms je les
    sélectionne ensuite comme fenêtre MDI par l'intermédiaire d'une liste déroulante
    pour afficher l'un ou l'autre fichier à la demande de l'utilisateur.
    La Sub commune permettant de charger le fichier précédemment sélectionné.
    En écrivant j'me rend compte que ça aurait peut-être été plus intelligent de passer le nom
    du fichier en paramètre de la Sub New(), non ? Mais si pour une raison quelconque le
    chargement du fichier est impossible, est-ce que je peux détruire la Form alors qu'a ce
    moment je serai dans New() ? pour éviter d'afficher une fenêtre vide.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par bubu92 Voir le message
    En écrivant je me rend compte que ça aurait peut-être été plus intelligent de passer le nom
    du fichier en paramètre de la Sub New(), non ?
    surement, mais il est encore temps

    Citation Envoyé par bubu92 Voir le message
    Mais si pour une raison quelconque le
    chargement du fichier est impossible, est-ce que je peux détruire la Form alors qu'a ce
    moment je serai dans New() ? pour éviter d'afficher une fenêtre vide.
    oui, ca dépend ce que tu appelles impossible
    il faudrait plus de détail pour trouver le meilleur moyen
    après sur le comment il y a au moins 2 choix, soit la fenêtre s'ouvre mais affiche un message d'erreur, soit tu peux thrower dans le constructeur (et il faut un try catch)
    throw new applicationexception(un message) (l'appelant catch et peut afficher le message)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 176
    Par défaut
    Merci pour tous ces précieux conseils.
    N'empêche que j'aurais bien aimé comprendre pourquoi y trouve la Sub quand c'est
    un Object mais pas quand c'est une Form. Je vais chercher et je pense qu'on peut
    considérer le sujet comme clos :-)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    parce que ton visual studio est paramétré en mode noob (mode par défaut seulement pour vb.net)
    qui autorise à écrire n'importe ou presque
    le mode mieux c'est option strict on (ou option explicit on je sais plus) qui évite de faire des bugs

    sur object il se doute bien que tu vas mettre des trucs dedans donc il te laisse être sûr de toi (ce qui nécessite un cast explicite en mode pas noob)
    et si tu mets un button dans ta variable de type object et que tu arrives sur la ligne call SubTest dessus ca va planter à l'exécution
    le mode pas noob évite des plantages à l'exécution à cause de code pas sûr en interdisant à la compilation d'écrire ca (nécessite un cast est dans certains cas la possibilité du cast est vérifiée)


    sur Form (cette classe est dans le framework) la méthode SubTest n'existe pas
    Form1 hérite de Form donc tu as le droit de mettre une intsance Form1 dans une variable de type Form, mais celà n'implique pas que tout ce que tu pourras mettre dans cette variable sera un Form1 et donc aura cette méthode

    l'interface est ce qu'il y a de plus propre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Cela me parait bien compliqué ...

    Mais bon, tu as une solution qui fonctionne.
    Toutefois, si tu as le temps d'améliorer ton système, tu pourrais implémenter (sans jeu de mots) la proposition de Pol63.

    Bonne soirée,


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/03/2006, 18h23
  2. Pb création instance SQL 2000 + SP3a sur windows 2003 server
    Par luxans dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/03/2006, 17h05
  3. Probleme création Table
    Par jmjmjm dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 19h06
  4. Probleme de instance
    Par Conficius dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2005, 21h21
  5. probleme de connexion forms-oracle
    Par bargou dans le forum Oracle
    Réponses: 2
    Dernier message: 11/11/2004, 11h27

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