Underline

Signaler
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour,

J'ai un champ du type "Label" sur une Windows.Forms. Je souhaiterais mettre le Text du Label en souligné qui si la souris est sur le text et pas dès qu'elle entre dans le control "Label".

Remarque: VariableLabel.Font.Underline est en lecture seul.

Merci
A voir également:

13 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
pour changer le style de la police :
label.Font = new Font(label.Font, FontStyle.Underline);


Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Merci Coq pour ta reponse sur le fait que VariableLabel.Font.Underline est en lecture seul.

Mais au sujet de la premiere partie tu as une solution??
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
ajoute un nouveau CustomControl à ton projet et fait le heriter de Label

ensuite met ça dedans :
private Point m_curPos = Point.Empty;

protected override void OnPaint(PaintEventArgs pe)
{
// StringFormat définissant toute la chaine comme etant à mesurer
StringFormat strFormat = new StringFormat();
strFormat.SetMeasurableCharacterRanges(new CharacterRange[]{new CharacterRange(0, this.Text.Length)});

// récupération du Region de notre chaine
Region textRegion = pe.Graphics.MeasureCharacterRanges(this.Text, this.Font, this.ClientRectangle, strFormat)[0];

// si le curseur est dans le controle et qu'il se trouve sur notre texte
if ( m_curPos != Point.Empty 
&& textRegion.GetRegionScans(pe.Graphics.Transform)[0].Contains(m_curPos) )
{
this.Font = new Font(this.Font, this.Font.Style | FontStyle.Underline);
}
else
{
this.Font = new Font(this.Font, this.Font.Style & ~FontStyle.Underline);
}

// Appel à la classe de base OnPaint
base.OnPaint(pe);
}

protected override void OnMouseMove(MouseEventArgs e)
{
// enregistrement des coordonnées
m_curPos.X = e.X;
m_curPos.Y = e.Y;

base.OnMouseMove (e);

// demande d'actualisation de l'affichage
this.Invalidate();
}

protected override void OnMouseLeave(EventArgs e)
{
// RAZ des coordonnées
m_curPos = Point.Empty;

base.OnMouseLeave (e);

// demande d'actualisation de l'affichage
this.Invalidate();
}


plus qu'a rajouter de la gestion d'erreur et à tester plus en profondeur :)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
a noter : tel quel ça ne fonctionne correctement qu'en TextAlign = TopLeft et si le texte tiens sur une seule ligne :-p

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Avant tout merci

Je prend le code et le verifie demain

A+
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Bonjour Cop

J'ai eu du mal a comprendre ton code :blush) et donc j'ai fais celui ci dessous. J'ai utilisé ta remarque sur le new Font.

A+

private void MouseEnter(object sender, EventArgs e)
{
labInTache2.Font = new Font(labInTache2.Font, labInTache2.Font.Style | FontStyle.Underline);
}

private void MouseLeave(object sender, EventArgs e)
{
labInTache2.Font = new Font(labFictif.Font, FontStyle.Bold);
}
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
en fait :
this.Font = new Font(this.Font, this.Font.Style | FontStyle.Underline);

ajout du style Underline aux styles existants

this.Font = new Font(this.Font, this.Font.Style & ~FontStyle.Underline);

retrait du style Underline des styles existant

mais bon si tu es sur que ton style "non activé" sera tjs Bold pkoi pas :)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Bonjour Cop

Dans ton code (qui m'est encore difficile a comprendre) tu soulève un point intéressant que je n'arrive pas a extirpé. C'est qu'elle est la taille d'une chaîne de caractère connaissant la Font.?
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
utilise Graphics.MeasureString

PS : y'a un comique qui a inverser les touches q et p de ton clavier ^^

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
264
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
12 juin 2013
3
Super

A=
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
test (mes excuses)

C # for one day, C # forever
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
re-test

C# for one day, C# forever :)
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
ces charp !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever :)