Override font dans un usercontrol ?

Signaler
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
-
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
-
Salut les pros...
Voila j'ai un pti soucis avec un override qui me saoule !
J'ai repris un user control horloge et je le modifie pour mon appli (bientôt posté sur votre site)
Mais voila il me jette à chaque fois, donc besoin de vos lumiére ^^
code de déclaration :
    Public Class Horloge
        Inherits Control
        Private Ctrl_font As New Font("Arial", 8)


puis l'override
        '--------------------------------------------------------
        <Category("Appearance"), Description("Font du texte de l'horloge."), _
        DefaultValue(True)> _
        Public Overrides Property font() As Font
            Get
                Return Ctrl_font
            End Get
            Set(ByVal value As Font)
                Ctrl_font = value
                Invalidate()
            End Set
        End Property ' Font du texte de l'horloge.


et enfin l'application
            '-----------------------
            ' Chiffres
            Dim taille_font As Single = MyBase.Font.Size
            Dim textCouleur As New SolidBrush(_couleurTexteCercle)
                e.Graphics.DrawString("12", MyBase.Font, textCouleur, CSng(Me.Width / 2 - taille_font), taille_font / 2)
                e.Graphics.DrawString("6", MyBase.Font, textCouleur, CSng(Me.Width / 2 - taille_font / 2), CSng(Me.Height - 2 * taille_font))
                e.Graphics.DrawString("3", MyBase.Font, textCouleur, CSng(Me.Width - taille_font - 2), CSng(Me.Height / 2 - taille_font))
                e.Graphics.DrawString("9", MyBase.Font, textCouleur, taille_font / 2, CSng(Me.Height / 2 - taille_font))
                font.Dispose()
                textCouleur.Dispose()
            '-----------------------


ps j'ai mis Mybase pour qu'il ne me saoule plus avec les erreures mais cela ne marche pas non plus !
Une idée ? Merci pour votre aide, cordialement @dn

15 réponses

Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

Quel message d'erreur ?

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
paramétre invallide, c'est tout, il me souligne la premiére ligne "12" en jaune.
je sais même où chercher -_-'
merci de ton aide
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
* je sais même pas
où chercher ^^
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

Tu as vérifier que tes paramètres étaient tous dans des plages de valeur acceptables et du bon type ?

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonsoir,
Je ne connais rien à VB.Net, mais cette syntaxe m'étonne :
Public Overrides Property font() As Font
En es-tu certain ? (de ces parenthçses qui suivent font ?)




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

ucfoutu, Oui, c'est ça (en autocompletion).
Tu peux aussi mettre des paramètres dans les parenthèses afin de faire une propriété paramétrée.

De plus, l'utilisation de MyBase.Font, fait appel à la propriété du parent.

Donc, se peut-il que MyBase.Font soit Nothing ?

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
bonjour,
My.base.font ou plutot Me.font est de type arial ,8Px
Pour ce qui est des paramétres, la variable Ctrl_font est initialisé dés le départ : Private Ctrl_font As New Font("Arial", 8)
De plus avant cela ne posait aucun soucis, c'est depuis que je cherche à "utiliser" les propriétés par défaut d'un control, plutot que de refaire des propriétées "éxotique" style texte_control ou couleur_ArPlan_control.
D'ailleur pour le backcolor cela marche nickel (même la transparence) :

'déclaration
Private Ctrl_couleurFond As Color = Color.DarkGray
' puis modif de la propriété backcolor
        <Category("Appearance"), Description("Couleur de fond de l'horloge."), _
        DefaultValue(True)> _
        Public Overrides Property backcolor() As Color '_couleurFond() As Color
            Get
                Return Ctrl_couleurFond
            End Get
            Set(ByVal value As Color)
                Ctrl_couleurFond = value
                Invalidate()
            End Set
        End Property ' Couleur de fond de l'horloge.

'pour la transparence c'est dans le new qui faut lui dire :
     '--------------------------------------------------------
        Public Sub New() 'constructeur
            '(autorise la transparence)
            SetStyle(ControlStyles.SupportsTransparentBackColor, True)
            '(autorise le double buffer)
            SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.UserPaint Or _
                                         ControlStyles.AllPaintingInWmPaint, True)
            '(met à jours les styles) utile ?? pas sûr
            UpdateStyles()
'..... end sub
'


VOila pourquoi j en enpige pas trop ce qui merdouille avec la font

Merci.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
bon j'avance pas top là
j'ai bien trouvé cela : http://www.codeproject.com/KB/miscctrl/font_property.aspx

mais bon je pige pas tout, il semble que les font ne soit pas si simple à traiter que le reste, exemple en plaçant comme lui un Get Me.font, cela fait une boucle infine qui à fait planter VB.net à chaque chargement du soft
il a fallu que je modifie le ficher VB avec le bloc note !

cela vient surrement de ça :
    public override void ResetFont()
        {
            Font = null;
        }

        private bool ShouldSerializeFont()
        {
            return(!Font.Equals(_defaultFont));
        }

        public Button()
        {
            Font = _defaultFont;
        }

mais voila je ne sais pas encore parfaitement traduire l'anglais et le c# .
please...j'suis sûr que certains savent pourquoi
D'avance Merci Pour Votre Aide .. @dN
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
ou ça ?

You can hide the Font property from the Properties window by overriding it

and specifying the "BrowsableAttribute" attribute:

[BrowsableAttribute(false)]
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
ou ça encore ?? qui se contredis

    <System.ComponentModel.Browsable(True), _
    System.ComponentModel.Description("Gets/sets the font used to render the
     text in the banner.")> _
    Public Overrides Property Font() As System.Drawing.Font
        Get
            Font = MyBase.Font
        End Get
        Set(ByVal Value As System.Drawing.Font)
            MyBase.Font = Value
            Invalidate()
        End Set
    End Property
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

Je ne vois plus trop où tu en es.

Concernant le bout de code en C#, voici une traduction libre et non testée en VB :
public overrides Sub ResetFont()
    Font = nothing
end sub

private function  ShouldSerializeFont() as Boolean
    return not Font.Equals(_defaultFont))
End Function

public Sub New() 'Constructeur de la classe Button apparemment
    Font = _defaultFont
end sub


Il faut avoir aussi les bonnes déclaration pour les attributs utilisés.

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
salut,
Bon en fait j'ai reussi (enfin) à indentifier d'ou vient la merdouille ! il vient du font.height qui est à nothing !

Pourtant j'ai virer tout le code qui le touche, c'est donc la propriété par défaut du control.

Comme vous pouvez le voir sur les images je peux parfaitement le modifier dans le concepteur, une fois ce control 'posé' sur une form.
Mais à chaque lancement j'ai l'erreur de l'image suivante.

Je suis trop noob pour piger ce qui va pas :(
Merci de votre aide !

Images :
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonsoir,

Sachant que c'est une propriété en lecture seule, je ne vois pas comment résoudre ton pb.
J'ai recherché un peu sur la toile et je n'ai retrouvé ton pb.

Et si tu retire ta property Font (celle que tu as ajoutée) ?

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
C'est bien ce que j'ai fait ! j'utilise seulement me.font.
En plus je remarque que parfois le designer me klaxonne en me disant que Horloge (le control en question) n'a pas de propriété backcolor et font, alors qu'il hérite de form.control. Je me demande si avec tout les essais d'override j'ai pas planté un truc, je vais essayer de repartir de zéro pour voir. De plus en plus VS plante et redémarre sur ce code
merci @ toi, je te tiens au jus.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Yahouuou

@ trouvé ! quel âne je fais !
cela vient de ça :

font.Dispose()

A vouloir trop bien disposer j'en fait trop MDR

Merci pour ton aide, sujet RESOLU