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

Windows Forms Discussion :

créer un control container


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut créer un control container
    bonjour

    je voudrais créer un controle containeur en héritant de system.windows.forms.control (c'est la contrainte)
    j'entends pas controle containeur que l'on puisse une fois posé lui poser d'autres chose dessus (comme un panel, un tabcontrol etc...)

    que faut il donc faire ?
    j'ai essayé d'hériter de IContainerControl mais ca ne suffit pas (j'ai tenté ca en regardant via reflector comment faisait les autres ... mais j'ai pas trop vu ce qui apportait cette fonctionnalité)

    merci
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Qu'implémenter IContainerControl ne suffise pas ce n'est pas étonnant, ce n'est qu'une vulgaire interface et non pas une classe abstraite contenant un début d'implémentation.

    Mais pourquoi hériter de control? A priori ça s'appelle créer des composants customs pauvres en fonctionnalités et bien buggés au lieu d'utiliser les standards.

    Deja, j'essaierai d'hériter d'un conteneur existant style UserControl ou Panel.
    Ca fournira deja toutes les fonctionnalités nécessaires au rendu des controles enfants (ce dont tu as besoin). Sinon tu es bon pour te payer toutes les méthodes de dessins ainsi que la gestion des coordonnées.
    Ensuite, si tu veux pouvoir poser des trucs dessus dans l'éditeur de vs2005 t'as besoin de créer une autre classe pour gérer cela, qui indiquera la façon dont ces enfants se serialisent.

    Ce n'est pas rien.

  3. #3
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    A mon avis, ce que tu veux c'est simplement avoir le "look" panel dans le designer. Il faut donc ajouter un <designer> à la class héritée de control.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Imports System.ComponentModel
    <Designer("System.Windows.Forms.Design.ParentControlDesigner")> _
    Public Class testcontainer
        Inherits Control
    End Class
    Aprés faut customizer, mais l'idée est là.

    Cdt.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    oui j'avais trouvé entre temps pour le parentcontroldesigner et ca fonctionne

    en fait je fais ca pour remplacer la gestion graphique déplorable du framework (entre autre la transparence)

    ca avance enfin il me reste quelques points encore ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Pour gérer la transparence, j'ai un control hérité de panel qui marche trés bien.

    J'ai pas le code sous la main, je te le poste ce soir au cas où.

    EDIT --> Voilà :
    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
     
    Public Class CLFWAddPanel
        Inherits Panel
        Private Sub PaintParentBackground(ByVal e As PaintEventArgs)
            If Not Me.Parent Is Nothing Then
                Dim rect As Rectangle = New Rectangle(Left, Top, Width, Height)
                e.Graphics.TranslateTransform(-rect.X, -rect.Y)
                Dim pea As PaintEventArgs = New PaintEventArgs(e.Graphics, rect)
                pea.Graphics.SetClip(rect)
                InvokePaintBackground(Parent, pea)
                InvokePaint(Parent, pea)
                e.Graphics.TranslateTransform(rect.X, rect.Y)
            Else
                e.Graphics.FillRectangle(SystemBrushes.Control, ClientRectangle)
            End If
        End Sub
        Protected Overrides Sub OnPaintBackground( _
            ByVal pevent As PaintEventArgs)
            PaintParentBackground(pevent)
        End Sub
        Protected Overrides Sub OnScroll( _
        ByVal se As ScrollEventArgs _
    )
            PaintParentBackground(New PaintEventArgs(Me.CreateGraphics, Me.Bounds))
            MyBase.OnScroll(se)
     
        End Sub
    End Class
    Normalement ça marche mais en terme de performance y'a des améliorations a apporter puisque l'on repeind systématiquement l'ensemble du bound du panel.

    Mais bon, je te laisse voir.

    Cdt.

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Sperot51, comme j'ai éditer bêtement , je remonte le post ...

    Cdt.

Discussions similaires

  1. créer un controle calendar à un événement
    Par celiaaa dans le forum IHM
    Réponses: 2
    Dernier message: 04/04/2007, 18h08
  2. [VBA-E] Comment créer un control sur une liste de choix ?
    Par Soulsurfer dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2007, 13h42
  3. Réponses: 3
    Dernier message: 09/06/2006, 21h45
  4. comment créer son controle et l'utiliser
    Par bajazet dans le forum MFC
    Réponses: 2
    Dernier message: 02/12/2005, 01h45
  5. Réponses: 11
    Dernier message: 02/09/2005, 16h41

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