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 :

Personnaliser un contrôle de base


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut
    Bonjour à toutes et tous,

    J'essaie de personnaliser un contrôle de base sous Visual Studio 2010 en suivant les conseils d'un livre mais rien ne se passe comme prévu...

    Si j'ai bien tout compris, je dois créer un contrôle utilisateur et hériter du contrôle sur lequel je veux me baser.

    Je fais donc ceci comme indiqué dans le livre :
    1. Je crée un projet de type "Bibliothèque de contrôles Windows"
    2. J'obtiens un genre de formulaire sans bord
    3. Je passe en fenêtre de code (F7)
    4. Je remplace l'héritage System.Windows.Forms.UserControl par System.Windows.Forms.CheckBox par exemple


    Le gros hic c'est que je ne vois pas cette ligne dans le fenêtre de code, je n'ai que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Class UserControl1
     
    End Class
    J'essaie alors de provoquer l'héritage en entrant moi-même la ligne adéquate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Inherits System.Windows.Forms.CheckBox
    Et là erreur ! VS me dit que la classe de base est définie 2 fois !

    Où dois-je donc aller pour modifier la classe de base ?

    Merci d'avance,

    webrider

    ********** Fusion **********

    Je viens encore de scruter le web et ma façon de faire paraît être la bonne, malgré tout VS me signale une erreur (en Anglais) :

    Error 1 Base class 'System.Windows.Forms.TextBox' specified for class 'UserControl1' cannot be different from the base class 'System.Windows.Forms.UserControl' of one of its other partial types. C:\Users\webrider\documents\visual studio 2010\Projects\WindowsControlLibrary1\WindowsControlLibrary1\UserControl1.vb 2 14 WindowsControlLibrary1
    Voici le code complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Class UserControl1
        Inherits System.Windows.Forms.TextBox
    End Class
    Merci pour votre aide !

    webrider
    Dernière modification par Danyel ; 06/06/2011 à 18h39. Motif: Fusion

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut errare humanum est
    bonjour
    il faut un projet windows library c'est bon.
    Mais l'astuce
    1/c'est supprimer ce "usercontrol cree autoimatiquement"
    2/faire
    explorateur solutions->ton projet->ajouter un nouvel nouvel ->elements communs->windows forms->controle personnalise(CustomControl1.vb qu'il l'appelle microsoft sous vs version fr).
    et la tu "inherites".
    bon code....

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    ta façon de faire est bien la bonne mais malheureusement ce que tu ne sais pas, c'est que VS cache une partie du code dans un deuxième fichier pour la lisibilité.
    C'est dans ce deuxième fichier Designer que tu peux voir l'héritage ainsi que les méthode Dispose et InitializeComponent.
    Pour afficher ce fichier, tu dois aller dans l'explorateur de solutions et cliquer sur le deuxième icon : "Afficher tous les fichiers"



    Et voila tu peux voir le fichier Designer caché par VS

  4. #4
    Invité
    Invité(e)
    Par défaut
    @MABROUKI : Merci mais je ne comprends pas vraiment ta méthode...

    @Sankasssss : Grand merci, cette méthode fonctionne à merveille !

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut custom control
    bonjour sanskass
    Malheureusement pour ta gouverne ,je ne le sais que trop bien et je te recommende de lire MSDN pour la manipulation des fichiers designer.
    C'est une mauvaise pratique, non recommende par microsoft et elle peut abimer tout le projet.
    La methode que je donne est preconise par le proprietaire du logiciel VS ,en l'occurrence Microsoft.
    Il ne faut pas bidouiller.
    A bon entendeur salut....

  6. #6
    Invité
    Invité(e)
    Par défaut
    Mabrouki,

    Je viens d'essayer ta méthode mais elle ne change pas grand chose à mon problème. Lorsque j'hérite après avoir ajouté un "custom control" j'ai exactement le même message d'erreur à savoir qu'il existe déjà une classe de base qui est System.Windows.Forms.Control.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Class CustomControl1
        Inherits System.Windows.Forms.CheckBox
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
     
            'Add your custom paint code here
        End Sub
     
    End Class
    Et le message d'erreur :

    Error 1 Base class 'System.Windows.Forms.CheckBox' specified for class 'CustomControl1' cannot be different from the base class 'System.Windows.Forms.Control' of one of its other partial types.
    Vois-tu une erreur dans mon code ?

    Merci,

    webrider

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    bonjour sanskass
    Malheureusement pour ta gouverne ,je ne le sais que trop bien et je te recommende de lire MSDN pour la manipulation des fichiers designer.
    C'est une mauvaise pratique, non recommende par microsoft et elle peut abimer tout le projet.
    La methode que je donne est preconise par le proprietaire du logiciel VS ,en l'occurrence Microsoft.
    Il ne faut pas bidouiller.
    A bon entendeur salut....
    Je pense qu'il y a confusion, je n'ai jamais rien dit sur ta manière de faire.
    J'ai juste répondu à webrider:
    Citation Envoyé par webrider
    Je viens encore de scruter le web et ma façon de faire paraît être la bonne
    d'ou ma réponse :
    Citation Envoyé par webrider
    ta façon de faire est bien la bonne mais malheureusement ce que tu ne sais pas
    Par contre vu ta réaction j'ai voulu tester ta solution (malgré que tout mes collègue utilise ma méthode), j'ai donc suivi tes instructions (On cherche toujours à s'améliorer).
    Mais malheureusement je ne voit pas de différence, j'ai toujours une classe sans "Inherits" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Class CustomControl1
     
        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(e)
     
            'Ajoutez ici votre code de dessin personnalisé
        End Sub
     
    End Class
    et j'ai toujours le Designer qui lui "Inherits" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class CustomControl1
        Inherits System.Windows.Forms.Control
     
        'Control remplace la méthode Dispose pour nettoyer la liste des composants.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
     
        'Requise par le Concepteur de contrôles
        Private components As System.ComponentModel.IContainer
     
        ' REMARQUE : la procédure suivante est requise par le Concepteur de composants
        ' Elle peut être modifiée à l'aide du Concepteur de composants. Ne la modifiez pas
        ' à l'aide de l'éditeur de code.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            components = New System.ComponentModel.Container()
        End Sub
     
    End Class
    Donc il semble logique que si on veux faire hériter le composant d'autre chose que System.Windows.Forms.Control il faut le changer dans le designer.
    Si tu sais nous montrer l'article disant comment il faut faire d'autre dans MSDN je suis preneur.

    De plus j'ai cherché un minimum sur le web suite à ces tests et j'ai trouvé cet article qui dit :
    The rapid fire description of the technique goes like this:

    1) Create a Windows Control Library project.
    2) Edit the hidden "designer" vb file and change the "inherits" clause to specify the control you want to modify instead.
    3) Fix the bug! (Again, more later.)
    4) Add logic to the code for the control and compile the component.
    Your control is ready to use!
    Donc quand tu réponds de la manière dont tu le fait, essaye d'avoir des sources pour appuyer tes écrits, c'est plus crédible et moins discutable.

    Bien à toi.
    Gaëtan.

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

Discussions similaires

  1. Personnaliser un type de base
    Par monmien dans le forum C#
    Réponses: 8
    Dernier message: 07/07/2011, 16h49
  2. outil pour contrôle integrité base de données
    Par fgalves dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2011, 14h54
  3. Réponses: 3
    Dernier message: 16/11/2009, 11h48
  4. Personnaliser le formulaire de base pour un projet
    Par toure32 dans le forum Delphi
    Réponses: 2
    Dernier message: 13/11/2006, 23h43
  5. Réponses: 1
    Dernier message: 25/01/2006, 21h44

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