Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB.NET] Errore su editing proprietà StringCollection a designtime (progettazione)

    Salve a tutti, ho realizzato una classe che eredita da stringCollection per aggiungere degli eventi e la inserisco in un controllo button come proprietà. Il problema è che quando, in modalità progettazione aggiungo il controllo e provo ad editare la proprietà stringcollection mi da l'errore "impossibilie trovare il costruttore sul tipo System.String". Come posso risolvere?
    Questo è il codice della classe che eredita da StringCollection :
    codice:
    Public Class StringsCollection
        Inherits Specialized.StringCollection
        Event Adding(ByVal sender As Object, e As CancelEventArgs)
        Event Added(ByVal sender As Object, e As EventArgs)
        Event Removed(ByVal sender As Object, e As EventArgs)
    
        Public Sub New()
            MyBase.New
        End Sub
        Public Sub New(strings As String())
            MyBase.New
            For i As Integer = 0 To strings.Length - 1
                Add(strings(i))
            Next
        End Sub
    
        Public Shadows Sub Add(testi As String())
            For i As Integer = 0 To testi.Length - 1
                Add(testi(i))
            Next
        End Sub
    
        Public Shadows Sub Add(testo As String)
            Dim e As New CancelEventArgs
            RaiseEvent Adding(Me, e)
            If Not e.Cancel Then MyBase.Add(testo) Else Exit Sub
            RaiseEvent Added(Me, New EventArgs)
        End Sub
    
        Public Shadows Sub Remove(testo As String)
            MyBase.Remove(testo)
            RaiseEvent Removed(Me, New EventArgs)
        End Sub
    End Class
    E questo è la parte di codice dove utilizzo la classe in una proprietà:
    codice:
    Private WithEvents _MenuVoice As New StringsCollection
    Public ReadOnly Property MenuVoice As StringsCollection
            Get
                Return _MenuVoice
            End Get
    End Property
    I database... la mia passione + o -

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,474
    Temo che il problema sia da individuare nel fatto che l'IDE non è in grado di attivare il giusto "editor" per il tipo a cui appartiene la proprietà.

    Potresti tentare di decorare la proprietà con un attributo per "guidare" l'IDE nella scelta, seguendo questo esempio di codice (vedi la prima riga):

    codice:
    <Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design", GetType(System.Drawing.Design.UITypeEditor))>
    Public Property Items As Collections.Specialized.StringCollection
       Get
          Return theCollection
       End Get
       Set(ByVal value As Collections.Specialized.StringCollection)
          theCollection = value
       End Set
    End Property

    Non è detto che funzioni proprio perché, pur ereditando da un tipo esistente, stai definendo una classe personalizzata e quindi potresti influire sul comportamento standard della classe base.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Grazie Alka, ho risolto per quanto riguarda l'inserimento in fase di design. Il problema è che il codice che viene creato quando inserisco le stringhe nella proprietà è il seguente:
    codice:
    New MyControls.StringsCollection.AddRange(New String() {"Stringa1", "Stringa2"})
    invece di
    codice:
    me.PersonalBarButton1.MenuVoice.AddRange(New String() {"Stringa1", "Stringa2"})
    sapete come posso fare ad indicare all'editor che deve inserire i valori in questo modo?
    I database... la mia passione + o -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.