myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » abgeleitete Checkbox ändert Hintergrund(?)farbe im Checked-Zustand
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

abgeleitete Checkbox ändert Hintergrund(?)farbe im Checked-Zustand

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE


commander_keen ist offline

abgeleitete Checkbox ändert Hintergrund(?)farbe im Checked-Zustand

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich habe eine Checkbox-Klasse erschaffen, die in Form eines Buttons daherkommt (flat) und ein Image zur Anzeige nutzt statt Häkchen. Dies ist jeweils eine runde LED (rot oder grün), die restliche Fläche der rechteckigen Grafik ist transparent.
Solange die Checkbox im Unchecked-Zustand ist, sieht alles gut aus, aber kurioserweise wird die Umgebung der grünen LED (Zustand: checked) weiß eingefärbt. (s.Bilder in folgenden Beiträgen)

Hat jemand eine Idee, warum dem so ist und wie man es beheben kann, sodass die Umgebung farblich gleich bleibt? (die weiße Fläche ist scheinbar größer als die Grafik, weiß muss also "von irgendwoher" kommen)

Ein fertiges Mini-Testprojekt (VS2010) inkl. Quelltext, Grafiken usw., wo nur die LEDcheckbox mittels Button getoggled wird, um den Effekt sichtbar zu machen, befindet sich im Anhang.

Die Klasse sieht folgendermaßen aus (sorgt nicht explizit für weiße Farbe):

C#-Code:
public partial class LedCheckbox : System.Windows.Forms.CheckBox
{
    public LedCheckbox() : base()
    {
        this.CheckedChanged += new System.EventHandler(this.LedCheckbox_CheckedChanged);

        this.Image = this.Checked ? Properties.Resources.greenLEDt : Properties.Resources.redLEDt;

        this.Appearance = System.Windows.Forms.Appearance.Button;
        this.AutoSize = true;
        this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.ForeColor = System.Drawing.Color.Transparent;
        this.MinimumSize = new System.Drawing.Size(15, 15);
    }

    // Change the Image
    private void LedCheckbox_CheckedChanged(object sender, System.EventArgs e)
    {
        this.Image = this.Checked ? Properties.Resources.greenLEDt : Properties.Resources.redLEDt;
    }
}


Dateianhang:
zip LedCheckboxTest.zip (76,40 KB, 56 mal heruntergeladen)
28.03.2012 00:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE

Themenstarter Thema begonnen von commander_keen

commander_keen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bild: ungewollter, weißer Hintergrund

commander_keen hat dieses Bild angehängt:

zwischenablage01np.png

28.03.2012 00:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE

Themenstarter Thema begonnen von commander_keen

commander_keen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bild: gewolltes Aussehen (unchecked State)

commander_keen hat dieses Bild angehängt:

zwischenablage02.png

28.03.2012 00:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.495
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo commander_keen,

da wird wohl die eine Bitmap außenherum weiß und die anderen außenherum transparent sein. Wenn ich richtig liege, brauchst du keinen Debugger, sondern ein Bildbearbeitungsprogramm, um den Fehler zu finden und zu beheben.

herbivore
28.03.2012 02:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rallepralle
myCSharp.de-Mitglied

Dabei seit: 08.08.2008
Beiträge: 140
Entwicklungsumgebung: VS 2010


rallepralle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

MS Powerpoint oder Word kann auch ausgewählte Farben transparent machen. Google mal danach.

lg
R.
28.03.2012 09:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.183


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich hab mir die Grafiken im Projekt angesehen, die haben schon beide einen transparenten Hintergrund.
28.03.2012 11:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE

Themenstarter Thema begonnen von commander_keen

commander_keen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich hatte die umgebenden Pixel bei beiden LED-Grafiken mittels IrfanView eigenhändig auf transparent gesetzt. (im Original sind es PNG, beide sind im Mini-Testprojekt des ersten Beitrages im Ordner Resources enthalten, falls sie jemand kontrollieren mag, ich wüsste nicht, was ich daran noch ändern könnte/müsste, wäre ggf. für Tipps dankbar)
Auch ist die weiße Fläche mit ca. 19x19 Pixeln größer als meine Grafik (15x15), daher nahm ich ein Problem im Programm an.


edit: Danke fürs Prüfen chilic.
Dann scheint die Wahrscheinlichkeit für eine programmbasierte Ursache wohl wieder zu steigen.

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von commander_keen am 28.03.2012 11:19.

28.03.2012 11:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rallepralle
myCSharp.de-Mitglied

Dabei seit: 08.08.2008
Beiträge: 140
Entwicklungsumgebung: VS 2010


rallepralle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

jedesmal, wenn das Bild gewechselt wird, wird im Hintergrund ein weißes Bild im Hintergrund gezeigt unabhängig davon, ob es ein rotes oder grünes Bild angezeigt wird(keine Ahnung warum).

Durch das Hinzufügen eines Hintergrundbildes, das dieselbe Farbe hat, wie die Form, ist das Problem gelöst.

Ich muss aber zugeben, dass es keine schöne ist. :) Evtl. helfen dir die Infos trotzdem. Sh. Anhang

vg
R.


Dateianhang:
zip LedCheckboxTest_2.zip (90,11 KB, 59 mal heruntergeladen)
28.03.2012 12:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE

Themenstarter Thema begonnen von commander_keen

commander_keen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In der Tat ein schmutziger Trick. ;-)
Guter Hinweis, das brachte mich jetzt auf die Idee ein transparentes BackgroundImage einzusetzen, aber leider ist das weiß nicht das tatsächliche BackgroundImage selbst, sondern "dahinter", das ist natürlich besch...eiden, denn bei transparenten Background-Image kommt es daher trotzdem wieder durch.

Das Problem mit einem grauen Bild ist, dass es sich nicht anpasst. Bei mir weicht es nur leicht ab, aber sobald man Windows freien Lauf lässt und unter XP anstatt "Windows klassisch" bspw. die standardmäßige Luna-Oberfläche lädt, wird das Rechteck direkt wieder auffällig andersfarbig als der Rest des Forms, da Windows dann eher ins gelb geht. Leider ist das somit keine praktikable Lösung, schade.
28.03.2012 15:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rallepralle
myCSharp.de-Mitglied

Dabei seit: 08.08.2008
Beiträge: 140
Entwicklungsumgebung: VS 2010


rallepralle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

dieses "weiße" ist die "Hintergrundfarbe" der Checkbox, und kann nich auf transparent eingestellt werden. Probiere mal die appearance nicht auf "Button", sondern "normal" zu stellen, und du wirst sehen, dass das Häkchen auf transparent, nicht aber die weiße Farbe drumherum transparent ist.

.... und ich glaub mit werken im Designer geht das auch nicht.... probiere mal das hier aus:

 True Transparency support for the .NET CheckBox control
28.03.2012 15:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE

Themenstarter Thema begonnen von commander_keen

commander_keen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Oh, sehr informativer Artikel, den habe ich bei meiner verzweifeltelten Googlelei nicht entdeckt gehabt. Ich hatte im Netz nur mal den Hinweis gefunden, dass ControlStyles.SupportsTransparentBackColor nicht möglich wäre. Das muss sich dann wohl auf sowas wie FlatStyle.System bezogen haben.
Da kommt mir jetzt entgegen, dass ich einen der Styles verwende, für den das ohne riesigen Aufwand nachrüstbar ist, nämlich FlatStyle.Flat

Meine Klasse also entsprechend ergänzt um

C#-Code:
public LedCheckbox() : base()
{
    this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    [...]
}

und Transparenz lässt sich in Verbindung von transparenter "Farbe" mit transparenter CheckedBackColor unter FlatAppearance tatsächlich nutzen.
Besten Dank! :-)

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von commander_keen am 28.03.2012 16:21.

28.03.2012 16:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
rallepralle
myCSharp.de-Mitglied

Dabei seit: 08.08.2008
Beiträge: 140
Entwicklungsumgebung: VS 2010


rallepralle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

kommt vlt. ein bisschen spät, aber wäre es in deinem Fall nicht besser statt einer checkBox ein normales Button zu machen und diesen deine Bilder nach jedem Drücken zu überweisen?

Ich hab das auch mal gemacht für einen Button, der zwei Zustände haben sollte. Bei jedem Zustand habe ich ihm ein transparentes Bild überwiesen. Hat wunderbar geklappt.

lg
R.
29.03.2012 10:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
commander_keen
myCSharp.de-Mitglied

images/avatars/avatar-2097.gif


Dabei seit: 15.11.2006
Beiträge: 16
Entwicklungsumgebung: Visual Studio 2005/2010 EE

Themenstarter Thema begonnen von commander_keen

commander_keen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das wäre u.U. tatsächlich einfacher gewesen, v.a. wenn ich vorher um den Umstand gewusst hätte, dass die Checkboxen so "herumzicken".
Ursprünglich sollten die Teile sowohl für Eingabe, als auch für bloße Anzeige (Änderung durch externe Daten) dienen. Eigentlich hatte ich auch beabsichtigt, auf den ThreeState zurückzugreifen, aber das hat sich aufgrund von externen Limitierungen vorerst erledigt.
Für den Fall, dass es doch noch dazu kommt, lasse ich es mal so, wäre auch unnötige Arbeit jetzt etwas fehlerfrei funktionierendes umzubauen. ;-)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von commander_keen am 30.03.2012 16:30.

30.03.2012 16:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 24.05.2013 00:02