Avatar billede ahara Nybegynder
07. juli 2008 - 20:48 Der er 5 kommentarer

Underline substring i label

Hej

Er der nogen der ved hvordan jeg nemmest laver en underline a f.eks. y'et i følgende text, der står i en label:

MyString

Altså ikke hele min label skal underlines, men kun et enkelt bogstav.

Tak
Avatar billede bvli Praktikant
07. juli 2008 - 20:55 #1
M&ystring

Måske man kunne forestille sig, at du lige gik dine åbne spørgsmål igennem og lukkede dem?
Avatar billede ahara Nybegynder
07. juli 2008 - 20:58 #2
Jeg har desværre ikke været på længe, men kigger dem lige efter.

Din syntaks virker kun hvis du holder Alt nede samtidig. Andre der har forslag?
Avatar billede thesurfer Nybegynder
07. juli 2008 - 23:28 #3
ahara> Underline kommer højst sandsynligt først frem, når du holder ALT nede, fordi din Windows er indstillet sådan.

Kig på menuen (i toppen) i et hvilken som program, og se om underline er der.. hvis de ikke er der, hold ALT nede og se om de kommer frem.

Jeg slår altid underline til.. andre foretrækker måske at underline først vises når man holder ALT nede..

Da denne indstilling er forskellige fra bruger til bruger, er der ikke rigtigt noget at gøre..

Man kunne fuske lidt med velplacerede labels.. altså en ekstra label hvor "y" er underline (se under "Fonts" i properies/egenskaber)..
Avatar billede aaberg Nybegynder
08. juli 2008 - 15:09 #4
Lidt sjovt du skulle spørge om dette, da jeg for at teste Graphics.MeasureCharacterRanges() metode, for et stykke tid siden har lavet netop det du har brug for. Herunder er koden.

For at bruge den, sætter du Text propertien til at være "M&y&String".

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;

namespace Aaberg.Controls
{
    public class CustomLabel : Control
    {
        public CustomLabel()
        {
            this.Size = new Size(100, 20);
        }

        public override string Text
        {
            get
            {
                return base.Text;
            }
            set
            {
                base.Text = value;
                this.Invalidate();
            }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            string[] strs = this.Text.Split('&');
            string text = this.Text.Replace("&", "");
            StringFormat format = new StringFormat();
            List<CharacterRange> cr = new List<CharacterRange>();
            int charIdx = 0;

            for(int idx = 0; idx < strs.Length; idx++)
            {
                string str = strs[idx];
                if (idx % 2 == 1)
                {
                    cr.Add(new CharacterRange(charIdx, str.Length));
                }
                charIdx += str.Length;
            }
            format.SetMeasurableCharacterRanges(cr.ToArray());

            e.Graphics.DrawString(text, this.Font, new SolidBrush(this.ForeColor), new PointF(0, 0));

            foreach (Region reg in e.Graphics.MeasureCharacterRanges(text, this.Font, this.ClientRectangle, format))
            {
                Rectangle rf = Rectangle.Round(reg.GetBounds(e.Graphics));
                e.Graphics.DrawLine(new Pen(this.ForeColor), rf.Left, rf.Bottom, rf.Right, rf.Bottom);
            }
        }

        private Font GetFont(int idx)
        {
            Font f = ((idx + 2) % 2) == 0 ? this.Font : new Font(this.Font, FontStyle.Underline);
            return f;
        }
    }
}
Avatar billede aaberg Nybegynder
22. juli 2008 - 13:29 #5
ahara?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester