Ajouter la propriété :"rotation de 90°"

Résolu
JeremyNeReculeraPas Messages postés 64 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 6 juin 2007 - 30 avril 2007 à 10:52
JeremyNeReculeraPas Messages postés 64 Date d'inscription mercredi 4 avril 2007 Statut Membre Derniè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.

Ce qui se conçoit bien s'énonce clairement...

6 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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...

<hr width="100%" size="2" />Julien.
3
JeremyNeReculeraPas Messages postés 64 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 6 juin 2007
30 avril 2007 à 17:21
C'est bon en fait il fallait seulement indiquer "protected"!!

Ce qui se conçoit bien s'énonce clairement...
3
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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.
0
JeremyNeReculeraPas Messages postés 64 Date d'inscription mercredi 4 avril 2007 Statut Membre Derniè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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JeremyNeReculeraPas Messages postés 64 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 6 juin 2007
30 avril 2007 à 16:50
J'avais bien créé la classe et mis l'héritage de l'ancienne mais je n'avais pas compris le "Pe".

Merciiii beaucoup!
Au plaisir!

Ce qui se conçoit bien s'énonce clairement...
0
JeremyNeReculeraPas Messages postés 64 Date d'inscription mercredi 4 avril 2007 Statut Membre Derniè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!

Ce qui se conçoit bien s'énonce clairement...
0
Rejoignez-nous