[c#]User control : problème attribut collection (List<Button>)
Bonjour,
J'essaie de développer un UserControl qui gère une collection de boutons (Liste typée).
Mon premier gros problème c'est que j'arrive bien à éditer la liste de boutons (modification d'aspect, Text ...) dans le designer mais la modification ne suit pas lors de l'exécution du projet instanciant ce UC.
Deuxième problème, l'ajout d'un bouton dans la liste je ne vois pas (ne sais pas) quel événement est levé du coup je ne peux pas mettre mon UC à jour.
J'avoue que je nage pas mal, j'ai vu 2 ou 3 articles sur la classe "ControlDesigner", mais je n'arrive pas hériter de cette classe, visual studio (2010 professionnal) ne trouve pas le type ou l'espace de nom.
J'ai déjà ajouter les namespaces suivants :
Code:
1 2
| using System.Windows.Forms.Design;
using System.ComponentModel.Design; |
A priori il faudrait ajouter la référence "System.Designer.dll" au projet mais elle ne figure pas dans la liste des réfences .Net, je la trouve dans le répertoire :
"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" mais l'ajout ne fonctionne pas
Citation:
Impossible d'afficher ce projet dans l'explorateur d'objets, car il n'est pas disponible ou pas encore généré. Verifier que le projet est disponible et généré.
Pourriez-vous m'orienter un peu ?
Merci d'avance.
ControlDesigner,System.Design
bonjour
Sous VS 2008 c'est System.Design.dll et non System.Designer.dll.Elle apparait dans les references du panneau .Net.
Dans divers Blog MSDN ce probleme est signale.
Car pour apparaitre dans le panneau References cette dll doit figurer dans le GAC.
Ajoute la au GAC comme suit
Ouvres 2 sessions Explorateur Windows.
Glisse (drag-drop) la dll de ton repertoire C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" vers C:\WINDOWS\assembly .
C:\WINDOWS\assembly est normalement le repertoire par defaut GAC (du moins pour VS 2008).
voici le code maintenant l'utilisation de la ControlDesigner:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
'User Control
Imports System.ComponentModel
'noter l'attribut du UserControl
<Designer(GetType(UserCtrlHorlogeDesigner))> _
Public Class UserControlHorloge
Private m_face As ClockFace
Public Property Face() As ClockFace
Get
Return m_face
End Get
Set(ByVal value As ClockFace)
m_face = value
End Set
End Property
End Class
Public Enum ClockFace
Analog
Digital
End Enum
'Classe ControlDesigner du User Control
Imports System
'voici l'imports
Imports System.Windows.Forms.Design
Imports System.ComponentModel
Imports System.Drawing.Drawing2D
Public Class UserCtrlHorlogeDesigner
Inherits ControlDesigner
Dim monShowBorder As Boolean = True
Dim objControlHorloge As UserControlHorloge = Nothing
Public Overrides Sub Initialize(ByVal component As System.ComponentModel.IComponent)
MyBase.Initialize(component)
' obtient une reference au UserControl
objControlHorloge = CType(component, UserControlHorloge)
End Sub
Protected Overrides Sub OnPaintAdornments(ByVal pe As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaintAdornments(pe)
' Appeler Classe Base
MyBase.OnPaintAdornments(pe)
'borders Invisible si Face Horloge = Digital ou ShowBorder n'est pas mis
If Not (monShowBorder) Or objControlHorloge.Face = ClockFace.Digital Then
Exit Sub
End If
'
If objControlHorloge.Face = ClockFace.Digital Then Exit Sub
' Dessine borders
Dim g As Graphics = pe.Graphics
Dim monPen As Pen = New Pen(Color.Gray, 1)
monPen.DashStyle = DashStyle.Dash
g.DrawRectangle(monPen, 0, 0, (objControlHorloge.Width - 1), (objControlHorloge.Height - 1))
monPen.Dispose()
End Sub
' Founit une implementation de ShowBorder pour
' memoriser propriete monShowBorder
' Pour developpeur (inaccessible au run-time)
Property ShowBorder() As Boolean
Get
Return monShowBorder
End Get
Set(ByVal value As Boolean)
monShowBorder = value
objControlHorloge.Refresh()
End Set
End Property
End Class |
bon code....
NET4 Full framework, .NET Framework 4 Client Profile RTM
bonjour sebpp
Encore un blog MSDN et tant pis pour notre gouverne sebpp.
J'ai oublie de te dire aussi qu'il faut quand on fait du developpement de cibler NET4 Full framework .
Or ca c'est penible mais moi je suis habitue,et je ne lache pas facilement la proie pour l'ombre.
Surement tu as cette emmerdante version de .NET Framework 4 Client Profile RTM(run-time redistribuable version compacte optimise pour les pre-requis au moment de deployer l'appli).
Pour developpeur build ton projet avec target plateforme ..NET Framework 4.
Si tu n'as pas cette option telecharge sur le site MSDN (gratuit) le .NET Framework 4 Full
ici le lien (version setup standalone-autonome complete)
http://www.microsoft.com/downloads/d...f-b21f31ab88b7
bon code....