webForumDet fria alternativet

Problem med textfärgen i egen kontroll

.NET

6 svar · 445 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag har lagt upp properties för textfärgen men de är "utgråade" så de går
inte att ändra.

private Brush m_txtFarg1 = Brushes.DimGray;
        private Brush m_txtFarg2 = Brushes.Snow;

 [Browsable(true),Category("Färg"), Description("Texten ena färg.")]
        public Brush txtColor1
        {
            get { return m_txtFarg1; }
            set { m_txtFarg1 = value; Invalidate(); }
        }
        [Browsable(true),Category("Färg"), Description("Texten andra färg.")]
        public Brush txtColor2
        {
            get { return m_txtFarg2; }
            set { m_txtFarg2 = value; Invalidate(); }
        }
// och används så här
 g.DrawString(vText, new Font(new System.Drawing.Font("Lucida Console", 
TextStorlek), FontStyle.Bold), txtColor1, 0.0f, 0.0f);

Några tips om hur jag fixa det???

Medlem sedan dec. 19996 721 inlägg
#2

Gör egenskapen till typen Color i stället. Dels för att följa standard, dels för att Color har en TypeConverter (krävs för att det ska fungera i propertylistan).

Medlem sedan mars 20011 880 inlägg
#3

Jag har försökt det men då får jag error att det inte går att convertera.
Kanske jag har gjort fel, så hur bör det se ut?

Medlem sedan dec. 19996 721 inlägg
#4

Brush b=new SolidBrush(someColor)

Medlem sedan mars 20011 880 inlägg
#5

Tack emission det blev kanonbra.
För att jag skall få min kontroll till att bli som jag har tänkt, så måste jag fortsätta att
fråga. Vad jag glömt att tala om är att min kontroll ärver ifrån label
System.Windows.Forms.Label.

Nu är det så att det finns ett antal av de properties som jag skulle vilja gömma, jag
har letat men inte hittat någon metod som har hjälpt mig att göra det.

Medlem sedan mars 20011 880 inlägg
#6

Jag har hittat ett sätt..

[Browsable(false)]
        public override Color ForeColor { get { return base.ForeColor; } set { } }

Men jag har en del som det blir error på...

[Browsable(false)]
        public override Image Image { get { return base.Image; } set { } }
        [Browsable(false)]
        public override System.Drawing.ContentAlignment ImageAlign { get { return base.ImageAlign; } set { } }
        [Browsable(false)]
        public override int ImageIndex { get { return base.ImageIndex; } set { } }
        [Browsable(false)]
        public override string ImageKey { get { return base.ImageKey; } set { } }
        [Browsable(false)]
        public override System.Windows.Forms.ImageList ImageList { get { return base.ImageList; } set { } }
        [Browsable(false)]
        public override System.Drawing.ContentAlignment TextAlign { get { return base.TextAlign; } set { } }
//error..
Error    1    'VertikalText.VertikalText.Image.get': cannot override inherited 
member 'System.Windows.Forms.Label.Image.get' because it is not marked 
virtual, abstract, or override 
Error    2    'VertikalText.VertikalText.Image.set': cannot override inherited 
member 'System.Windows.Forms.Label.Image.set' because it is not marked 
virtual, abstract, or override 
Error    3    'VertikalText.VertikalText.ImageAlign.get': cannot override 
inherited 
member 'System.Windows.Forms.Label.ImageAlign.get' because it is not 
marked virtual, abstract, or override    
//osv

..några förslag på hur jag kan fixa detta??

Medlem sedan maj 20012 812 inlägg
#7

Om en metod inte är markerad som virtual, abstract eller overrided så kan du inte själv overrida den, eftersom det inte är meningen att du skall kunna ta bort den funktionallitet som finns där.

Det finns dock en operator som heter new som kanske skulle funger, har aldrig testat det så jag vet inte...

public new Image Image { get { return base.Image; } set { } }

Det kan ju inte hända mer än att kompilatorn skriker åt dig ;)

- M

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)