Laden...

ToggleSwitch: meine zweite Komponente

Erstellt von byte_schubser vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.098 Views
B
byte_schubser Themenstarter:in
77 Beiträge seit 2008
vor 15 Jahren
ToggleSwitch: meine zweite Komponente

Hallo zusammen,

ToggleSwitch ist ein animierter Wippschalter mit folgenden
Merkmalen:

Dynamische Polygon Berechnung (ohne Bitmaps)
Freie Farbauswahl für Flächen und Texte
Einstellbare Neigung und Einzug
Automatische Text Zentrierung
Maus/Tastatur/Fokus Steuerung
Einstellbare Signalton Ausgabe

Mit 19 Eigenschaften können Funktion und Darstellung
geändert werden. Die Begriffe der Eigenschaften sollten
selbsterklärend sein.

Über die 3 Ereignisse OnActivate, OnDeactivate und OnChange
lässt sich dieser Schaltertyp in einer Anwendung auswerten.

Leider gelingt mir die Einbindung des Komponenten Bitmaps
in die Toolbox nur über direkte Pfadangabe.

Weiss jemand warum diese Anweisung nicht klappt?
[ToolboxBitmap(typeof(ToggleSwitch), "ToggleSwitch")]

Viel Spaß damit

Udo

B
byte_schubser Themenstarter:in
77 Beiträge seit 2008
vor 15 Jahren

...und hier das Projekt - mit der Demo wie sie im Bild zu sehen ist.

2.187 Beiträge seit 2005
vor 15 Jahren

Hallo byte_schubser,

Das Bild funktioniert nicht, da Visualstudio einen bestimmten FullQualifiedName/namespace für die Resource vergiebt, der vom FullQualifiedName/namespace der Klasse abweicht, die du mit typeof angegeben hast.

Im Anhang findest du eine funktionierende Version (die darüber hinaus auch für VS2005 und .Net 2.0 geeignet ist).

Gruß
Juy Juka

[EDIT]anhang vergessen [/EDIT]

5.299 Beiträge seit 2008
vor 15 Jahren

Hi byte_schubser!

Bin beeindruckt von deine erste und jetzt diese 2. Komponente.
Findich erstaunlich, daß jemand auf Anhieb eine gut aussehende, funktionierende, brauchbare, bugfreie (so wies aussieht), designerfähige Komponente raushaut, und dabei auch gleich mit der etwas vertrackten Logik des WinForms-Ownerdrawing zurecht kommt.

Wenndedich weiter in OwnerDrawing einarbeiten willst, guck dir mal die Klassen System.Drawing.Drawing2D.Matrix und GraphicsPath an.
Oder guck dir mein OwnerDrawing - Werk an, da werkel ich eifrig damit herum.

Zu deine Events, da tätich die Benamung ändern. Framework-Standard ist dieser Aufbau:*public class PaintEventArgs *public event Eventhandler<PaintEventArgs> Paint *protected virtual OnPaint(PaintEventArgs e)

abstrahiert also*public class XYEventArgs *public event Eventhandler<XYEventArgs> XY *protected virtual OnXY(XYEventArgs e)

Also OnActivate sollte man ein Event nicht nennen, so sollte die Methode heißen, die es auslöst.

Dann beerbst du UserControl, machst aber nix damit (UserControl ist eigentlich als Sammel-Container anderer Controls gedacht).
Angemessener wäre, Control zu beerben, das dürfte die Komponente v.a. schlanker machen.

BeginInit, EndInit und Dispose machen nix - kannste löschen.

DoActivate, DoDeActivate - eigentlich wäre deren Logik doch sehr logisch im setter der Active - Property untergebracht, ?

Eine Optimierung noch:
Setter von Properties sollten ihr BackingField erstma testen, bevor sie weiteren Code auslösen.
Weil wenn z.B. Active=true, und wird nochmal true zugewiesen, da sollte sich nichts weiter ereignen, insbesondere keine Events.
Äh - deine Active-Prop löst ja gar nicht das Event aus?

Ja, soweit

Der frühe Apfel fängt den Wurm.