Custom Farbe für Controls



  • Abend,

    Ich will in meiner WinForms Anwendung den Controls neue Farben gehen. Nehmen wir z.B. ein Panel. Ich wähle bei Probierties "Backcolor" und habe da 3 Tabs: Custom, Web und System. Allerdings kann ich bei Custom auch nur aus ein paar vordefinierten Farben auswählen. Wie kann ich per Hand eine Farbe in RGB eingeben (also z.b. 100, 52, 240)?



  • this.Panel1.BackColor = Color.FromArgb(100, 52, 240);
    

    Einfach in de Constructor nach InitializeComponents() damit.



  • Cool, Danke!

    Über den VS Designer (also die Properties) geht das also nicht direkt?



  • Du kannst es auch im Designer direkt eintragen - am besten dann als Hexwert: 0xAARRGGBB
    d.h. bei deinem Beispiel (blauviolett) also 0xFF6434F0.
    (Beachte, daß du für den Alphawert immer FF eintragen mußt, da WinForms keine Transparenz unterstützt).



  • Mhh weis jetzt nicht, ob es erst seit net 4.0 so ist, aber zumindest werden
    jetzt Transparenzen unterstützt, ich hab es grad getestet.



  • Zumindestens für die "BackColor" kommt dann (bei mir) die Fehlermeldung: "Control does not support transparent background colors." (sowohl bei VS2008 als auch bei VS2010 und zwar sowohl für eine Form als auch ein Control, z.B. Panel).

    Bei "ForeColor" kann man allerdings eine transparenten Farbe angeben (z.B. "0x80FF0000" bzw. "128;255;0;0"), die Transparenz hat aber keine Wirkung (d.h. selbst bei "0x00000000" wird es im satten schwarz angezeigt).



  • Geht schon in 2.0:

    SetStyle(ControlStyles.SupportsTransparentBackColor, true)
    

    If true, the control accepts a BackColor with an alpha component of less than 255 to simulate transparency. Transparency will be simulated only if the UserPaint bit is set to true and the parent control is derived from Control.



  • ok, liegt es dann vielleicht an windows 7? Ich mache keine weiteren
    Einstellung, und kann sogar über den diesigner die Form
    Transparent Halbtransparent machen.

    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                button1.BackColor = Color.Bisque;
                panel1.BackColor = Color.FromArgb(50, 255, 0, 0);
                this.Opacity = 0.5f;
            }
        }
    }
    

    Das hier funktioniert ohne Fehler.


  • Administrator

    adonis schrieb:

    ok, liegt es dann vielleicht an windows 7?

    Mit Win7 hast du sicher bessere Karten als mit WinXP, denn seit WinVista ist mit DWM eine bessere Unterstützung für transparente Hintergründe vorhanden. Meine bisherigen Resultate haben aber gezeigt, dass es auf verdammt viele Einstellung darauf ankommt, ob transparente Hintergründe in WinForms funktionieren oder nicht. Daher würde ich empfehlen, in WinForms darauf zu verzichten. Die Chance ist gross, dass es bei irgendeinem Kunden nicht funktionieren wird.

    Grüssli


Log in to reply