Avatar billede Slettet bruger
09. april 2008 - 18:25 Der er 8 kommentarer og
1 løsning

Ændre farve på ListBox' Focus Rectangle?

Hej,

Hvordan ændrer jeg farve på en ListBox' Facus Rectangle?
Eks.: Jeg vil ændre den fra standard (blå) til RGB 150 255 150.
Avatar billede aaberg Nybegynder
09. april 2008 - 20:40 #1
Du bliver nød til at lave lidt om på listboxen for at ændre farverne. Dette er heldigvis ikke så svært. Nedenfor har jeg pastet ind en klasse som nedarver fra ListBox, og tilføjer lidt funktionalitet. I denne ListBox kan du ændre farve på tekst og baggrunden bag teksten, når den er selectet.

Lidt meget for 15 point, men hvad faen! :o)

public class VariableColorTextBox : ListBox
    {
        public VariableColorTextBox()
        {
            this.DrawMode = DrawMode.OwnerDrawFixed;
        }

        private Color _itemBackColor = Color.White;

        public Color ItemBackColor
        {
            get { return _itemBackColor; }
            set
            {
                _itemBackColor = value;
                this.Invalidate();
            }
        }

        private Color _selectedItemBackColor = Color.FromArgb(150,255,150);

        public Color SelectedItemBackColor
        {
            get { return _selectedItemBackColor; }
            set
            {
                _selectedItemBackColor = value;
                this.Invalidate();
            }
        }

        private Color _textColor = Color.Black;

        public Color TextColor
        {
            get { return _textColor; }
            set
            {
                _textColor = value;
                this.Invalidate();
            }
        }

        private Color _selectedTextColor = Color.Red;

        public Color SelectedTextColor
        {
            get { return _selectedTextColor; }
            set
            {
                _selectedTextColor = value;
                this.Invalidate();
            }
        }

        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            base.OnDrawItem(e);

            Color backColor;
            Color textColor;

            if ((e.State & DrawItemState.Selected) > 0)
            {
                backColor = this.SelectedItemBackColor;
                textColor = this.SelectedTextColor;
            }
            else
            {
                backColor = this.ItemBackColor;
                textColor = this.TextColor;
            }
            e.Graphics.FillRectangle(new SolidBrush(backColor), e.Bounds);
            e.Graphics.DrawString(this.GetItemText(this.Items[e.Index]), this.Font, new SolidBrush(textColor), e.Bounds.Location);
        }
    }
Avatar billede aaberg Nybegynder
09. april 2008 - 20:42 #2
Og så har jeg ved et uheld kaldt den for VariableColorTextBox... doh! Dette skal selvfølgelig være VariableColorListBox.

Snart sengetid for mig! :-)
Avatar billede Slettet bruger
09. april 2008 - 21:07 #3
Hehe :)
Mange tak!
Jeg har allerede overide't OnDrawItem-funktionen for at kunne give teksten forskellige farver, så måske kan jeg gøre det enklere, hvis jeg bare ved, hvilken variabel der indeholder den relevante farveværdi?
Avatar billede aaberg Nybegynder
10. april 2008 - 08:17 #4
Det er operativsystemet som tegner listboxen, hvis man bruger en standard listbox. Man har desværre ikke kontrol over hvilke farver der bliver brugt. Den eneste måde at ændre farverne på, er at override ListBox klassen. Så hvidt jeg ved er der ikke en nemmere måde.
Avatar billede Slettet bruger
10. april 2008 - 08:53 #5
Okay... Hvorfor kunne det så lade sig gøre at ændre tekstfarven?
Jeg prøver lige at lege med det, når jeg får tid.
Avatar billede aaberg Nybegynder
10. april 2008 - 21:25 #6
Jamen, laver du ikke tekstfarven om ved at override OnDrawItem metoden? I OnDrawItem metoden styrer du jo selv hvordan en item skal tegnes, så kan du tegne baggrunden i hvilken farve du vil! Hvis jeg misforstår, hvordan laver du da om på tekstfarven?
Avatar billede Slettet bruger
11. april 2008 - 09:56 #7
Jo, jeg overwriter OnDrawItem man laver ikke en helt nu klasse. Jeg overskriver kun for instansen.
Avatar billede Slettet bruger
17. april 2008 - 16:10 #8
...
Avatar billede Slettet bruger
02. maj 2008 - 09:59 #9
Lukket. Spørger igen senere, hvis det bliver nødvendigt.
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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