ImageList.ImageCollection in Property verwenden

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    ImageList.ImageCollection in Property verwenden

    Hallo Foristen,

    es kommt sehr selten vor, das ich mal fremde Hilfe in Anspruch nehme - aber jetzt ist es so weit.

    Entwicklungsumbebung Visual Studio 2010, Visual Basic
    Folgendes Problem:

    Ich habe eine neue Klasse erstellt, die von der Picturebox erbt.

    VB.NET-Quellcode

    1. Imports System.Windows.Forms
    2. Public Class CL_AdsImageList
    3. Inherits PictureBox


    Inerhalb dieser Klasse brauche ich ein Image-Auflistung - wie ist mir egal. Ich möchte aber im Property-Grid möglichst den Bildauflistungs-Editor nutzen.

    Probiert habe ich es bereits mit List(of image) bin damit aber grandios gescheitet. Das Problem ist wohl der Datentyp Image, der nicht instanzierbar ist.

    Meine nächste Überlegung war die ImageList direkt zu implementieren. Der Weg scheint mir am vielversprechendsten zu sein.

    VB.NET-Quellcode

    1. Private WithEvents lImageList As New ImageList
    2. Private cImageCollection As ImageList.ImageCollection = lImageList.Images
    3. Public ReadOnly Property ListOfImages As ImageList.ImageCollection
    4. Get
    5. Return cImageCollection
    6. End Get
    7. End Property


    Die Eigenschaft Images von ImageList ist ReadOnly, da ja offensichtlich nur eine Referenz übergeben wird. Also habe ich das genauso gemacht.
    Wenn ich die Klasse dan auf das Form ziehe und die Eigenschaft ListOfImages bearbeite erscheint tatsächlich auch der Bildauflistungseditor. Soweit so gut.

    Das Problem ist, wenn ich ein Bild hinzufüge erscheint folgende Fehlermeldung:
    Der Parameter muss den Typ "Image" haben. Parametername: value

    Ich habe momentan keine Ahnung, wie ich das Problem einkreisen kann. Google & Co geben nicht viel her, nur ein paar ähnliche Foreneinträge, die allesamt ungelöst blieben.

    Ich hoffe hier mal ein paar Impulse zu bekommen, damit ich in der richtigen Richtung weitermarschieren kann.

    Achja: Es ist schon beabsichtigt, das die Imagelist im Steuerelement gekapselt sein soll. Mit einer externen Listview möchte ich nur ungern arbeiten, das das projektweit Mehraufwand bedeuten würde.
    du kannst dir mal ILSpy downloaden, oder einen anderen Debugger, und im Framework-Code gucken, wie ImageList das macht.
    Es gibt vermutlich bestimmte Attribute, die sowas steuern.

    Oder du guckst dich auf Rosylin um, da ist der FW-Code veröffentlicht. Leider haben die Pfeiffen Rosylin umbenannt in iwas, was ich mir nicht merken konnte. Jdfs gibt's im INet en FW-Code veröffentlicht, und da wird man sowas nachgucken können.
    ILSpy kannte ich bisher nicht, ist aber ein cooles Tool, auf das ich in Zukunft immer wieder gerne zurückgreifen werde.

    Die Idee mit den Attributen war gut, geholfen hat es mir in diesem Fall nicht. Die verwertbaren Attribute haben keine Veränderung gebracht.

    VB.NET-Quellcode

    1. Private WithEvents lImageList As New ImageList
    2. Private imageCollection As ImageList.ImageCollection = lImageList.Images
    3. <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), MergableProperty(False)>
    4. Public ReadOnly Property ListOfImages As ImageList.ImageCollection
    5. Get
    6. Return Me.imageCollection
    7. End Get
    8. End Property


    Naja, was solls. Eigentlich ist es unlogisch, wenn ich nur eine Referenz weitergebe und den zugrundeliegenden Datentyp beibehalte sollte es immer noch genauso funktioneren.
    Ich habe jetzt zuviel Zeit damit verbracht - ich muss weiter, ich nehme jetzt einen anderen Weg.

    Sollte jemanden noch was einfallen, kann er es gerne posten. Interessieren würde mich trotzdem, woran ich gescheitert bin. Eventuell nehme ich mir dem Thema nochmal an, wenn ich mehr Zeit habe.