JeremyNeReculeraPas
Messages postés64Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention 6 juin 2007
-
30 avril 2007 à 10:52
JeremyNeReculeraPas
Messages postés64Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention 6 juin 2007
-
30 avril 2007 à 17:21
Bonjous à tous!
Je me suis créé un control représentant en fait une porte(un panel) comportant un bouton(pour acceder à la form de parametrage de la porte), et un label(indiquant le nom de cette porte. Ce control est rectangulaire et horizontal. Je souhaiterai lui ajouter une propriété permettant de faire pivoter ce controle de 90° lors du design afin de rendre ce control vertical.J'ai cherché un peu partout et apparement il me faut utiliser un SmartTag. Cependant la seule source que j'ai réussi à trouver n'est pas très complexe mais manque à mon sens d'éxplications et comporte des commentaires au format XML dont j'ignore totalement l'utilité.
Donc si quelqu'un pourait soit aiguiller mes recherches, soit simplement m'éclairer sur le sujet, je vous remerci d'avance.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 30 avril 2007 à 16:25
Non atta, tu dois faire une classe héritant de ta porte. Donc par exemple, dans un nouveau fichier
Public Class RotatablePorte
Inherits Porte
'Ensuite tu dis que ta porte est un panel donc elle hérite de forms.control et con possède une méthode OnPaint que tu dois Overrider...
'Tappe juste "Overrides " puis cherche OnPaint dans la liste des méthodes proposées
Overrides Sub OnPaint(Pe as painteventargs)
'Pe c'est le paramètre de la méthode contenant l'objets graphics pour dessiner, pas ta porte
Pe.Graphics.Rotate...
En soit je ne veux pas redimmensionner ta porte par plaisir, c'est juste que lorsqu'elle est horizontale, le rectangle de dessin n'est pas le même que lorsque'elle est verticale. Il faut indiquer cela à windows en modifiant la propriété Size.
Par contre pour tes boutons et tes labels à l'intérieur de ton Panel, j'ai bien peur que tu aies à recoder une classe RotatableButton, label... pour chaque controle utilisé. Ce qui n'est quand même pas la mort...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 30 avril 2007 à 13:29
Salut,
Voila comment je vois la chose :
Fais une classe héritant de ta porte ou éventuellement insère du code dans ta classe, mais l'héritage sera plus propre.
Appelons cette nouvelle classe RotatablePorte (ça en jete un max comme nom ^^)
Tu ajoute une propriété et un champs correspondant pour la rotation, puisque tu ne souhaite que le tourner de 90°, on peut utiliser un boolean : Rotated.
private _rotated as boolean
Public property Rotated as boolean ...
Ensuite il y a la propriété Size à modifier, il faut faire un overrides :
private _size as Size
Overrides property Size as size
Get
If _rotated then
return new size(_size.height, _size.width)
else
return size
end if
end get
Set
... 'Pareil
Et enfin pour le dessin,
Overrides Sub OnPaint(Pe as ...)
'On tourne le dessin
If _rotated Then Pe.Graphics.RotateTransform(90)
'On dessine
MyBase.OnPaint(Pe)
...
'Eventuellement on le remet droit à la fin
Pe.Graphics.ResetTransform
End sub
J'ai tappé directement dans la freetextbox, il y a peut-être quelques erreurs, mais le principe est là, ca devrait aller je pense
<hr size="2" width="100%" />Julien.
JeremyNeReculeraPas
Messages postés64Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention 6 juin 2007 30 avril 2007 à 16:16
Merci pour ton aide!
*Alors si j'ai bien compris tu veux d'abord changer la taille du userControl (maPorte)
puis faire pivoter chacun de ses composants.
Très bonne idée je te l'accorde.
Cependant il y a quelque problèmes(probablement de compréhension de ma part):
Déjà je n'ai pas précisé que je suis sur VB2005 express et que je suis un très récent débutant( 4 semaines...)
Aussi:
1)"OnPaint()" ne peut etre déclaré "overrides"
2)pour "Pe.Graphics.RotateTransform(90)"----> Ma porte est un controle utilisateur(et VB n'y trouve pas de membre graphics) et RotateTransform() ne s'applique pas sur les buttons et labels.
Voila,
encore merci quand mème!
Ce qui se conçoit bien s'énonce clairement...
Vous n’avez pas trouvé la réponse que vous recherchez ?
JeremyNeReculeraPas
Messages postés64Date d'inscriptionmercredi 4 avril 2007StatutMembreDernière intervention 6 juin 2007 30 avril 2007 à 17:16
En fait il y a encore une erreur que je ne résoud pas:
Sur "OnPaint" est bien overridable mais lorsque je fais comme tu me la dis :"Overrides
Sub OnPaint(
ByVal Pe
As PaintEventArgs)"
Ca m'affiche l'erreur suivante:
Erreur 1: 'Public Overrides Sub OnPaint(Pe As System.Windows.Forms.PaintEventArgs)' ne peut pas se substituer à 'Protected Overridable Sub OnPaint(e As System.Windows.Forms.PaintEventArgs) ', car elles ont des niveaux d'accès différents.
Mais tu m'as déjà énormément aidé et je t'en remercie encore!