none
List (of Link) gibt keine Konstrjuktoren zur auswahl RRS feed

  • Frage

  • Ich entwickle ein Steuerelement (Forms) mit .Net 3.5 und Windows 7 und VS2010 (VB) und habe Folgendes Problem: Ich habe die Klasse Link erstellt und eine Liste List(Of Link). Von dieser Klasse werden zwei Klassen abgeleitet. Das Problem ist, daß man wenn man Mit der Methode  Add der Listenklasse einen Link hinzufügen will, keine Konstruktoren erscheinen sondern nur Add(Item as Blockedit.List). Was habe ich an der Erstellung der Klasse falsch gemacht?
    Public Class Link
        Friend Nam As String
        Friend IdNr As Integer
        Friend Thickn As Integer
        Friend FrThickn As Integer
        Friend Framed As Boolean
        Friend FrColor As Color
        Friend FillColr As Color
        Friend Prnt As Link
        Friend Ctrl As Control
        Sub New()
            Nam = ""
            Thickn = 1
            FrThickn = 1
            Framed = False
            FrColor = Color.Black
            FillColor = Color.Black
        End Sub
        Sub New(Name As String, Id As Integer, Thickn As Short)
            Me.Name = Name
            IdNr = Id
            Me.Thickn = Thickn
        End Sub
    
    
        Public Property Name As String
            Get
                Return Nam
            End Get
            Set(value As String)
                Nam = value
            End Set
        End Property
        Public Property Id
            Get
                Return IdNr
            End Get
            Set(value)
                IdNr = value
            End Set
        End Property
        Public Property Parent As Object
            Get
                If Ctrl IsNot Nothing Then
                    Return Ctrl
                Else
                    Return Prnt
                End If
            End Get
            Set(value As Object)
                If value.GetType.ToString = "StdLink" Or value.GetType.ToString = "ComplexLink" Then
                    Ctrl = value
                Else
                    Prnt = value
                End If
                Prnt = value
            End Set
        End Property
        Public Property Thickness As Integer
            Get
                Return Thickn
            End Get
            Set(value As Integer)
                Thickn = value
            End Set
        End Property
        Public Property FrameThickness As Integer
            Get
                Return FrThickn
            End Get
            Set(value As Integer)
                FrThickn = value
    
            End Set
        End Property
        Public Property FrameColor As Color
            Get
                Return FrColor
            End Get
            Set(value As Color)
                FrColor = value
            End Set
        End Property
        Public Property FillColor As Color
            Get
                Return FillColr
            End Get
            Set(value As Color)
                FillColr = value
            End Set
        End Property
        Public Overridable Sub Draw(E As Graphics)
    
        End Sub
        Public Overridable Sub DrawFramed(E As Graphics)
    
        End Sub
        Public Overridable Function IsPointInLink(Pt As Point) As Boolean
            Return False
        End Function
        Public Overridable Sub DrawLinkAchors(e As Graphics)
    
        End Sub
        Public Overridable Function ClickedLinkAnchor(Pt As Point) As Integer
            Return 0
        End Function
        Public Overridable Sub BlockToXml(Elem As XElement)
    
        End Sub
        Public Overridable Sub BlockFromXml(Elem As XElement)
    
        End Sub
    End Class
    Public Class LinkTest
        Dim Links As List(Of Link)
        Sub New()
            ' Links.Add("Test", 1, 1) Listenbefehl akzeptiert keine Konstruktoren 
        End Sub
    End Class
    


    Markus Lein Hochstadenstr 6 50674 Köln (Cologne) Germany

    Dienstag, 14. August 2012 11:47

Antworten

  • Hallo Markus,

    entweder habe ich dein Problem nicht verstanden oder Du hast etwas vergessen.

    Wo soll denn die Überladung mit der Übergabe der einzelnen Eigenschaften herkommen?

    Links.Add( New Link( "Test", 1, 1 ) )

    funktioniert doch. Aber damit Du einen Konstruktor verwendest, musst Du das dann auch richtig schreiben.

    BTW: Damit das funktioniert, musst Du die Instanz der List( Of Link ) auch erstellen. Also anstelle von:

    Dim Links As List(Of Link)

    schreibst Du dann:

    Dim Links As New List( Of Link )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 14. August 2012 11:55
    Moderator
  • Bei der Gelegenheit sei angemerkt, dass die ganzen internen Variablen (die du als Property nach außen weitergibst), also "Nam" und "IdNr" usw., besser als Private deklariert werden sollten, um Verwirrungen und Fehler zu vermeiden.

    Um von außen darauf zuzugreifen, reicht der Name des Property ja völlig aus.

    LG, Dennis.

    • Als Antwort markiert Markus1961 Montag, 3. September 2012 09:39
    Donnerstag, 16. August 2012 08:50

Alle Antworten

  • Hallo Markus,

    entweder habe ich dein Problem nicht verstanden oder Du hast etwas vergessen.

    Wo soll denn die Überladung mit der Übergabe der einzelnen Eigenschaften herkommen?

    Links.Add( New Link( "Test", 1, 1 ) )

    funktioniert doch. Aber damit Du einen Konstruktor verwendest, musst Du das dann auch richtig schreiben.

    BTW: Damit das funktioniert, musst Du die Instanz der List( Of Link ) auch erstellen. Also anstelle von:

    Dim Links As List(Of Link)

    schreibst Du dann:

    Dim Links As New List( Of Link )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 14. August 2012 11:55
    Moderator
  • Bei der Gelegenheit sei angemerkt, dass die ganzen internen Variablen (die du als Property nach außen weitergibst), also "Nam" und "IdNr" usw., besser als Private deklariert werden sollten, um Verwirrungen und Fehler zu vermeiden.

    Um von außen darauf zuzugreifen, reicht der Name des Property ja völlig aus.

    LG, Dennis.

    • Als Antwort markiert Markus1961 Montag, 3. September 2012 09:39
    Donnerstag, 16. August 2012 08:50