Announcement

Collapse
No announcement yet.

Problem mit "List(Of T)"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit "List(Of T)"

    Hi!

    Ich entwickle etwas MenuStrip - ähnliches als Usercontrol.
    Als "MenuItems" möchte ich Labels verwenden.

    Nun habe ich folgendes Problem:
    Beim versuch folgenden Code zu kompilieren

    [highlight=vb.net]
    Private lstItems As List(Of Label)

    Public Sub New()
    InitializeComponent()
    lstItems = New List(Of Label)
    End Sub

    Public Property Items() As List(Of Label)
    Get
    Return lstItems
    End Get
    Set(ByVal value As List(Of Label))
    lstItems = value
    End Set
    End Property
    [/highlight]

    erscheint folgende Fehlermeldung:

    Fehler bei der Codegenerierung für die Items-Eigenschaft. Fehler: Der Typ "System.Windows.Forms.Label" in Assembly "System.Windows.Forms,
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ist nicht als serialisierbar gekennzeichnet.
    Wie bekomme ich es hin, Labels in eine List(Of T) zu packen?

    Vielen Dank schon im Voraus.
    Steve

  • #2
    Also das Problem kann eigentlich nicht an der Liste liegen. Ist die Form evtl. mit [Serializable] gekennzeichnet, weil Du vielleicht die Properties speichern möchtest? Denn dann müssen alle public Properties auch serialisierbar sein. Ein Label wird aber mit Sicherheit nicht serialisierbar sein, weil es eigentlich auch keinen Sinn macht dieses zu serialisieren

    Comment


    • #3
      Dein Code ist Ok und eine generische Liste darf natürlich jede Art von Klassen verwalten also auch Winforms Controls. Das Problem ist der Winforms Designer der für die Properties eines Controls ja Code in InitializeComponents erzeugen muss. Dafür hat er einen Serialisierer der aus dem Control den entsprechenden Initialisierer Code erzeugt.

      Markiere deine Property mit dem DesignerSerializationVisibility Attribut. Und setze die Visibility auf Content. Dann werden nur die veröffentlichten (und unproblematischen) Properties der Labels beim Festlegen des Code für die InitializeComponents Methode von UserControl und/oder Form berücksichtigt. Wenn diese Property gar nicht zum designen gedacht war und auch aus dem Designer heraus nicht änderbar sein soll kannst du die Visibility auch auf Hidden setzen (anstatt auf Content).

      Code:
      <Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
      Public Property Items() As List(Of Label)

      Comment


      • #4
        Hallo Ralf.

        Vielen Dank für den Vorschlag. Jetzt funktioniert alles wunderbar.

        MfG
        Steve

        Comment

        Working...
        X