VB.NET Usercontrol avec le designer consultable propriété pas l'économie de la valeur au moment de l'exécution
J'ai été faire un contrôle et ont ajouté une propriété pour une liste(de CustomClass). La classe personnalisée contient une chaîne de caractères, une image et une liste d'une autre classe personnalisée qui contient une chaîne de caractères et une image. J'ai ajouté cette propriété pour le concepteur, l'ajout de l'consultable attributs et tout semble fonctionner correctement avec cette.
Mon problème vient lors de l'exécution du programme. Je peux mettre toutes les valeurs à l'intérieur de la propriété et je peux aller retour et ils sont sauvés, cependant, dès que je lance le programme, les valeurs sont effacées tant que la propriété est définie à Rien.
Afin de permettre à mon bien être édités et sauvegardés, je me rends compte que je dois initialiser la liste et l'ont fait dans la méthode d'accesseur de la propriété (si la valeur de la propriété n'est rien).
J'ai modifié les valeurs dans le concepteur et placé un point d'arrêt sur tous les éléments qui utilisent la propriété et le champ sous-jacent, ainsi que sur ses méthodes de lui-même. Le premier point d'arrêt est frappé d'être consulté et de la valeur est toujours rien.
Je ne suis pas sûr de l'endroit où les valeurs sont censées être stockées comme je l'ai vérifié le code de concepteur où il aurait normalement types de magasins tels que les chaînes et j'ai vérifié les ressources pour voir si elles ont été enregistrées (comme une image). Après l'exécution du code, les valeurs dans le concepteur disparaissent également.
Un peu de code dans le contrôle de la
Private _Items As List(Of Models.Category) = New List(Of Models.Category)
<Browsable(True), _
EditorBrowsable(EditorBrowsableState.Always), _
Category("Data"), _
Description("The items with sub items that should be displayed"), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
Public Property Items As List(Of Models.Category)
Get
'Return _Items
Return Me.ExpMenu1.Categories
End Get
Set(ByVal value As List(Of Models.Category))
Me.ExpMenu1.Categories = value
'_Items = value
End Set
End Property
Le code malveillant à l'intérieur de ExpMenu1
''' <summary>
''' Gets or sets the categories.
''' </summary>
''' <value>The categories.</value>
Public Property Categories() As List(Of Category)
Get
If m_Categories Is Nothing Then
m_Categories = New List(Of Category)
End If
Return m_Categories
End Get
Set(ByVal value As List(Of Category))
m_Categories = value
End Set
End Property
La Classe De Haut Niveau (Catégorie)
Imports System.Collections.Generic
Namespace ExpandingMenuWPF.Models
''' <summary>
''' Category class.
''' </summary>
Public Class Category
''' <summary>
''' Gets or sets the name of the category.
''' </summary>
''' <value>The name of the category.</value>
Public Property CategoryName() As String
Get
Return _CategoryName
End Get
Set(ByVal value As String)
_CategoryName = value
End Set
End Property
Private _CategoryName As String
''' <summary>
''' Gets or sets the sub items.
''' </summary>
''' <value>The Sub Items.</value>
Public Property SubItems() As List(Of SubItem)
Get
Return _SubItems
End Get
Set(ByVal value As List(Of SubItem))
_SubItems = value
End Set
End Property
Private _SubItems As New List(Of SubItem)
Private _ShowImage As Boolean
Public Property ShowImage() As Boolean
Get
Return _ShowImage
End Get
Set(ByVal value As Boolean)
_ShowImage = value
End Set
End Property
Private _Image As Image
Public Property CategoryImage() As Image
Get
Return _Image
End Get
Set(ByVal value As Image)
_Image = value
End Set
End Property
End Class
End Namespace
La classe imbriquée (Point)
Namespace ExpandingMenuWPF.Models
''' <summary>
''' Sub Item class.
''' </summary>
Public Class SubItem
Public Sub New()
End Sub
''' <summary>
''' Gets or sets the title.
''' </summary>
''' <value>The title.</value>
Public Property Title() As String
Get
Return _Title
End Get
Set(ByVal value As String)
_Title = value
End Set
End Property
Private _Title As String
Private _ShowImage As Boolean
Public Property ShowImage() As Boolean
Get
Return _ShowImage
End Get
Set(ByVal value As Boolean)
_ShowImage = value
End Set
End Property
Private _Image As Image
Public Property SubItemImage() As Image
Get
Return _Image
End Get
Set(ByVal value As Image)
_Image = value
End Set
End Property
End Class
End Namespace
Si quelqu'un a des idées ou des connaissances de l'endroit où les valeurs doivent être stockées, je serais incroyablement reconnaissants. Je ne pense pas que je suis en train de faire quelque chose de particulièrement compliqué.
Fichier Resx. Partie des éléments de données:
<data name="ExpandingVerticalMenu1.Items" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEdFeHBhbmRpbmdNZW51V1BGLCBWZXJzaW9uPTEuMC4wLjAsIEN1
bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAUVN5c3RlbS5EcmF3aW5nLCBWZXJz
aW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49YjAzZjVmN2YxMWQ1MGEz
YQUBAAAAIEV4cGFuZGluZ01lbnVXUEYuTW9kZWxzLkNhdGVnb3J5BAAAAA1fQ2F0ZWdvcnlOYW1lCV9T
dWJJdGVtcwpfU2hvd0ltYWdlBl9JbWFnZQEDAASNAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxp
c3RgMVtbRXhwYW5kaW5nTWVudVdQRi5Nb2RlbHMuU3ViSXRlbSwgRXhwYW5kaW5nTWVudVdQRiwgVmVy
c2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQEUU3lzdGVt
LkRyYXdpbmcuSW1hZ2UDAAAAAgAAAAYEAAAABENhdDEJBQAAAAAKBAUAAACNAVN5c3RlbS5Db2xsZWN0
aW9ucy5HZW5lcmljLkxpc3RgMVtbRXhwYW5kaW5nTWVudVdQRi5Nb2RlbHMuU3ViSXRlbSwgRXhwYW5k
aW5nTWVudVdQRiwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
PW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAIUV4cGFuZGluZ01lbnVXUEYuTW9kZWxz
LlN1Ykl0ZW1bXQIAAAAICAkGAAAAAQAAAAQAAAAHBgAAAAABAAAABAAAAAQfRXhwYW5kaW5nTWVudVdQ
Ri5Nb2RlbHMuU3ViSXRlbQIAAAAJBwAAAA0DBQcAAAAfRXhwYW5kaW5nTWVudVdQRi5Nb2RlbHMuU3Vi
SXRlbQMAAAAGX1RpdGxlCl9TaG93SW1hZ2UGX0ltYWdlAQAEARRTeXN0ZW0uRHJhd2luZy5JbWFnZQMA
AAACAAAABggAAAAEU3ViMQAKCw==
</value>
Se plaindre de la dernière ligne.
.Designer.vb
fichiers.Non, Bien changé avant le moment de la compilation, puis sur exécuter.
Oh, au moment de la conception? Bon d'accord, c'est tout à fait normal à l'époque. Et vous parlez de cette propriété:
Public Property Items As List(Of Models.Category)
?En effet. Toutes les pensées?
OriginalL'auteur Chris | 2011-08-17
Vous devez vous connecter pour publier un commentaire.
La sérialisation des modifications apportées au moment de la conception de votre
*.Designer.vb
fichier est contrôlé par leDesignerSerializationVisibility
l'attribut.Il peut avoir l'une des trois valeurs possibles:
Dans votre cas, vous essayez de sérialiser le contenu d'un
List(Of T)
, ce qui signifie que vous aurez besoin d'indiquer le générateur de code pour produire du code pour le contenu de l'objet, plutôt que de l'objet lui-même—leDesignerSerializationVisibility.Content
valeur.Vous avez actuellement la valeur de la valeur
Hidden
, ce qui empêche le générateur de code de production de code pour l'objet que ce soit! La plus commune erreur est le paramètreVisible
. Alors que c'est presque toujours ce que vous voulez pour la persistance, c'est pas va faire le travail pour les propriétés qui représentent des collections (commeList(Of T)
) contenant les données que vous êtes intéressé à la sérialisation.Donc, vous avez besoin de modifier la déclaration de votre bien afin d'inclure ceci:
Qui devrait fonctionner à merveille. Toute modification apportée au moment de la conception sera automatiquement enregistré par le designer générateur de code dans votre formulaire associé
*.Designer.vb
fichier, et enregistrés avec votre projet. Cependant, comme discuté dans les commentaires, cela ne fonctionnera pas pour les modifications apportées au cours de au moment de l'exécution.C'est bizarre. Ce qui devient invalide à ce sujet? Avez-vous être plus précis une erreur? Pouvez-vous modifier votre question afin d'inclure la partie du fichier, il est de repérage est pas valide?
Désolé, je clique sur entrer et il a envoyé avant que j'ai eu fini de composer. C'est de l'essoufflement de l' </Données> tag dans le fichier resx après le </Valeur> tag.
J'ai également essayé de supprimer les resx et laisser le refaire. Le nettoyage, la reconstruction, le redémarrage de VS etc. Pas de chance.
OriginalL'auteur Cody Gray