CheckedListBox umschreiben
-
Hallo Leute,
nachdem ich feststellen musste, dass es in der "normalen" CheckedListBox nicht möglich ist, einzelne Items unterschiedlich farbig darzustellen, habe ich begonnen, diese umzuschreiben.
Das hat auch schön geklappt, wenn man als Einfärbkriterium den Selected-State o. ä. nimmt, also bereits vorhandene Eigenschaften der Items. Ich möchte jetzt aber ein eigenes Kriterium programmieren. Dazu muss ich doch meinen Items eine neue Eigenschaft zuweisen, welche ich dann ändere, wenn ich es eingefärbt haben möchte.
Wie mache ich das? Muss ich mir da die Item-Klasse umschreiben? Wo hole ich die her?
Vielleicht kann mir einer von euch ein wenig auf die Sprünge helfen.
Besten Dank
physici
-
Na ja, ganz einfach
Ableiten
Membervariable definieren
evtl die dazu passenend get und set Methoden
und fertig
-
So weit war ich auch schon. Habe das wie folgt versucht: Da die Items (Typ Object) über eine Collection-Klasse geführt werden, erstelle ich also eine neue solche Collection-Klasse, deren Add-Methode ich so abändere, dass es das neue Item verwendet. Dieses Item bzw. die Objekt-Klasse habe ich mit der von mir gewünschten Eigenschaft versehen.
Die neue Object-Klasse habe ich problemlos hinbekommen. Doch bei der Collection tritt jetzt immer ein Fehler auf:
public class MyObjectCollection : System.Windows.Forms.CheckedListBox.ObjectCollection { public new int Add(object obj, bool state) { obj = new MyObject(); base.Add(obj, false); } }
und der Fehler:
error CS1501: Keine Überladung für die Methode 'ObjectCollection' erfordert '0' Argumente
Kann damit überhaupt nix anfangen, da ich nicht weiß, was der mit Argumenten meint. Habe eigentlich das gleiche gemacht, wie mit der Object-Klasse. Was ist daran verkehrt?
Gruß
physici
-
du mußt den Konstruktor noch definieren und Parameter an die Basisklasse weitergeben.
-
Du kannst auch einfach dein MyObject in die normale ObjectCollection stecken,und in Object aus der Collection in MyObject casten wenn du den Eintrag in der Liste zeichnest.
if(Object_aus_Collection is MyObject) { MyObject myobject = (MyOject)Object_aus_Collection; PaintInFarbe(myobject); } else { NormalPaint(Object_aus_Collection); }