VB 4.6]]Probleme mit for each bei einer liste

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von _DarkForest.

    VB 4.6]]Probleme mit for each bei einer liste

    Hallo, ich arbeite gerade an einem Control und habe ein Problem:

    Ich erstelle eine Property, alles Okay soweit.

    VB.NET-Quellcode

    1. Private _ToolboxItems As New List(Of ToolBoxItem)
    2. Public Property ToolboxItems() As List(Of ToolBoxItem)
    3. Get
    4. Return _ToolboxItems
    5. End Get
    6. Set(ByVal value As List(Of ToolBoxItem))
    7. _ToolboxItems = value
    8. End Set
    9. End Property


    Aber wenn ich sie in einer For each-Schleife durchlaufe erhalte ich eine System.NullReferenceException4
    Der Code:

    VB.NET-Quellcode

    1. Dim cp as integer = 0
    2. Dim item As ToolBoxItem
    3. For Each item In _ToolboxItems
    4. e.Graphics.DrawString(item.ItemModel, Me.Font, Brushes.Black, New Point(5, 5 + cp))
    5. cp = cp + 20
    6. Next

    Ich probiere seit fast einer halben stunde herum, ohne lösung.

    Kann mir jmd. sagen was ich falsch mache?

    Grüße.
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    @_DarkForest Zunächst ist Dein Code nicht signifikant, da passiert nix.
    Setz einen Haltepunkt drauf und stell fest, was da Nothing ist.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Zunächst der gesamte Code
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Imports System.Drawing.drawing2d
    3. Imports System.Windows.Forms
    4. Public Class ToolBox
    5. Inherits UserControl
    6. Sub New()
    7. MyBase.New
    8. MyBase.SetStyle(ControlStyles.UserPaint, True)
    9. MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    10. MyBase.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    11. End Sub
    12. Private Sub doPaint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    13. e.Graphics.SmoothingMode = SmoothingMode.HighQuality
    14. Try
    15. Dim pen1 As New Pen(Me.ForeColor, 5)
    16. Dim BrushBackground As New SolidBrush(Me.BackColor)
    17. e.Graphics.FillRectangle(BrushBackground, New Rectangle(New Point(0, 0), New Point(Me.Width - 1, Me.Height - 1)))
    18. e.Graphics.DrawRectangle(pen1, New Rectangle(New Point(0, 0), New Point(Me.Width - 1, Me.Height - 1)))
    19. Dim cp = 0
    20. Dim item As ToolBoxItem
    21. For Each item In _ToolboxItems
    22. e.Graphics.DrawString(item.ItemModel, Me.Font, Brushes.Black, New Point(5, 5 + cp))
    23. cp = cp + 20
    24. Next
    25. Catch ex As Exception
    26. e.Graphics.DrawLine(Pens.Red, New Drawing.Point(0, 0), New Drawing.Point(Me.Size.Width, Me.Size.Height))
    27. e.Graphics.DrawLine(Pens.Red, New Drawing.Point(Me.Size.Width, 0), New Drawing.Point(0, Me.Size.Height))
    28. e.Graphics.DrawString(ex.ToString, Me.Font, Brushes.Black, New Point(0, 0))
    29. End Try
    30. End Sub
    31. Private _ToolboxItems As New List(Of ToolBoxItem)
    32. Public Property ToolboxItems() As List(Of ToolBoxItem)
    33. Get
    34. Return _ToolboxItems
    35. End Get
    36. Set(ByVal value As List(Of ToolBoxItem))
    37. _ToolboxItems = value
    38. End Set
    39. End Property



    Durch den haltepunkt erfahre ich, das _ToolboxItems nothing ist.
    Ich könnte mir auch nicht vorstellen das irgendwas anderes nothing ist.

    EDIT: Ich habe das problem gelöst, VisualStudio hat sehr früh gemerkt, das ich das Objekt ToolBoxItem nicht Serialisiert habe...
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „_DarkForest“ ()

    @Counterbug
    Ich habe doch gesagt:

    Ich habe mein typ nicht serialisiert!

    Aber jetzt habe ich ein neues Problem
    "Das Objekt mit dem Typ "Controls.ToolBoxItem[]" kann nicht in den Typ "Controls.ToolBoxItem[]" konvertiert werden. "
    Hä??
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.

    _DarkForest schrieb:

    nothing
    Mach mal in den Setter von ToolboxItems einen Haltepunkt rein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das Problem habe ich gelöst:

    VB.NET-Quellcode

    1. Public Property ToolboxItems() As List(Of ToolBoxItem)
    2. Get
    3. Return _ToolboxItems
    4. End Get
    5. Set(ByVal value As List(Of ToolBoxItem))
    6. Dim OldValue = value
    7. Try
    8. _ToolboxItems.Clear()
    9. For Each i As ToolBoxItem In value
    10. _ToolboxItems.Add(i)
    11. Next
    12. Catch ex As Exception
    13. Console.WriteLine("Controls.dll|ControlBox (handle " & Me.Handle.ToString & ")] Failed to change Propertys! Undo...")
    14. End Try
    15. End Set
    16. End Property


    Jetzt schmeißt der designer nurnoch "Das Objekt mit dem Typ "Controls.ToolBoxItem[]" kann nicht in den Typ "Controls.ToolBoxItem[]" konvertiert werden. " aus
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Danke @ErfinderDesRades

    Das klingt logisch!
    Danke das du die dinge immer in Deustchem deutsch erklärst
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.