none
Passage d'une procédure à une Form RRS feed

  • Question

  • Bonjour,

    J'avais fait en VB6 un bout de code que je n'arrive pas à faire fonctionner en .net.

    La fonction Write (mot as string, param as string) as string a été créée sur 3 feuilles Form1, Form2 et Form3. Elle est différente en fonction des feuillles.

    Sur une autre Form nommée FormTest j'avais créé une variable Feuille as Form.

    Depuis la feuille FormMain je passais avant ouverture de la feuille FormTest, la feuille souhaitée à la variable Feuille.

    FormTest.Feuille= Form1 ou Form2 ou Form3

    Puis FormTest.Showdialog

    Et dans Form Test, je pouvais utiliser Feuille.Write qui correspondait à Form1, Form2, Form3.

    Là, à l'écriture du code, Write n'est pas reconnue car elle n'est pas implémentée à Feuille.

    J'ai essayé avec Public Feuille as Form = New Form1, mais c'est pareil.


    lundi 5 mars 2012 07:40

Réponses

  • Bonjour,

    Pour cela il faut créer une interface :

    Public Interface MyInterface
        Sub Write(mot As String, param As String)
    End Interface

    Ensuite dans chacun des formulaires indiquer que ce dernier implémente votre interface :

    Public Class Form1
        Implements MyInterface
    
        Public Sub Write(mot As String, param As String)
            ' Code du write dans Form1
        End Sub
    
    End Class

    Côté FormTest vous devez créer un champ Feuille de type MyInterface :

    Public Class FormTest
    
        Public Feuille As MyInterface
    
        Public Sub WriteOnFomr()
            Feuille.Write("mot", "param")
        End Sub
    
    End Class

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 5 mars 2012 09:13
    Modérateur
  • Le saut de ligne crée est une nouvelle fonction Write1. C'est pour cela que cela fonctionnait.

    Il faut simplement ajouteras Implements MyInterface.Write

    Public Class Form1
        Implements MyInterface
    
        Public Sub Write (mot As String, param As String)as Implements MyInterface.Write
    ' Code du write dans Form1
        End Sub
    
    End Class

    L'interface doit être déclarée dans une interface de type fichier .vb, comme vous l'avez précisé. Cela ne fonctionne pas dans un module

    Merci.

    lundi 5 mars 2012 16:58

Toutes les réponses

  • Bonjour,

    Pour cela il faut créer une interface :

    Public Interface MyInterface
        Sub Write(mot As String, param As String)
    End Interface

    Ensuite dans chacun des formulaires indiquer que ce dernier implémente votre interface :

    Public Class Form1
        Implements MyInterface
    
        Public Sub Write(mot As String, param As String)
            ' Code du write dans Form1
        End Sub
    
    End Class

    Côté FormTest vous devez créer un champ Feuille de type MyInterface :

    Public Class FormTest
    
        Public Feuille As MyInterface
    
        Public Sub WriteOnFomr()
            Feuille.Write("mot", "param")
        End Sub
    
    End Class

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 5 mars 2012 09:13
    Modérateur
  • Merci pour votre réponse.

    Par contre, je ne sais pas où déclarer l'interface.

    Public Interface MyInterface
       
    Sub Write(mot As String, param As String)
    End Interface

    J'ai mis cette déclaration dans un module, mais cela ne fonctionne pas.

    lundi 5 mars 2012 12:03
  • Bonjour,

    Dans votre projet faites clic-droit : "Ajouter un nouvel élément" et choisissez "Interface". Saisissez comme nom de fichier, le nom de votre interface (avec .vb à la fin).

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 5 mars 2012 12:25
    Modérateur
  • Merci cela fonctionne.

    Cela fonctionne aussi dans un module.

    J'avais aussi un problème de saut de ligne.

    Il faut sauter une ligne après Implements MyInterface sinon message d'erreur. L'exemple ci-dessous renvoie une erreur si pas de saut de ligne entre Implements MyInterface et Public Toto as string.

    Public Class Form1
       
    Implements MyInterface
    Public Toto as string   


    lundi 5 mars 2012 14:23
  • Le saut de ligne crée est une nouvelle fonction Write1. C'est pour cela que cela fonctionnait.

    Il faut simplement ajouteras Implements MyInterface.Write

    Public Class Form1
        Implements MyInterface
    
        Public Sub Write (mot As String, param As String)as Implements MyInterface.Write
    ' Code du write dans Form1
        End Sub
    
    End Class

    L'interface doit être déclarée dans une interface de type fichier .vb, comme vous l'avez précisé. Cela ne fonctionne pas dans un module

    Merci.

    lundi 5 mars 2012 16:58
  • Bonjour,

    Oui... Autant pour moi le fait d'avoir oublié le "Implements MyInterface.Write" ?

    Est-ce que cela à résolu votre demande initiale ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 5 mars 2012 17:22
    Modérateur