vb 2008 express
un simple exemple permettant de montrer comment créer un contrôle dynamique, lui ajouter des propriétés, évènements puis permettre a l'utilisateur de pouvoir déplacer et redimensionner les contrôles a sa guise sur sa forme
l'exemple à été fait sur des richtextbox
j'ai gérer la redimention et le deplacement sur le bouton gauche de la souris + l'appui sur la touche CTRL ou SHIFT qui me paraissait pratique , de plus sur un RTB le bouton gauche de la souris sert a sélectionner du texte.
pour déplacer :
maintenez la touche CTRL enfoncé et le bouton gauche de la souris pour déplacer le contrôle
pour redimensionner
maintenez la touche SHIFT enfoncé et le bouton gauche de la souris au dessus de contrôle puis redimensionner
créer un projet avec une form et ajouter le code suivant :
Source / Exemple :
Public Class Form1
Dim ctrlEnCours As RichTextBox 'le control en cours sur lequel on travaille
Dim poscourante As Point 'la position de la souris sur le control en cours
Dim deplace As Boolean 'si le controle doit se deplacer
Dim changetaille As Boolean 'si le controle va changer de taille
Dim positionClickForm As Point 'position de la souris sur la form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'CRTL + bouton gauche souris sur un control pour le deplacer
'SHIFT + bouton gauche souris pour redimentionner
'creatin de 3 controles pour exemples
'leur taille est definie à 70/100, tx et ty
'leur position commence au coordonnée 50,50 de la feuille cx et cy
Dim i, cx, cy, tx, ty As Integer : tx = 70 : ty = 100 : cx = 50 : cy = 50
For i = 1 To 3
creer_bouton(i, tx, ty, cx, cy)
cx = cx + tx + 10 'ecart de 10 entre chaque controle
Next i
End Sub
Private Sub creer_bouton(ByVal numcase As Integer, ByVal taillex As Integer, ByVal tailley As Integer, ByVal xcb As Integer, ByVal ycb As Integer)
Dim CtrlRtb As New System.Windows.Forms.RichTextBox
'DEFINITON DES PROPRIETES
'son nom
CtrlRtb.Name = "Rtb_" & (numcase + 1)
'sa taille
CtrlRtb.Size = New System.Drawing.Size(taillex, tailley)
'sa position sur la form
CtrlRtb.Location = New System.Drawing.Point(xcb, ycb)
'multiligne = oui
CtrlRtb.Multiline = True
'visible=oui
CtrlRtb.Visible = True
'pas de bordure
CtrlRtb.BorderStyle = BorderStyle.None
'ajout du controle à la form
Me.Controls.Add(CtrlRtb)
'DEFINITION DES EVENEMENT
'ajout des evenement utiles au deplacement et redimention
'des controls précedement crées
AddHandler CtrlRtb.MouseDown, AddressOf ctrl_MouseDown
AddHandler CtrlRtb.MouseMove, AddressOf ctrl_MouseMove
AddHandler CtrlRtb.KeyDown, AddressOf crtl_KeyDown
AddHandler CtrlRtb.KeyUp, AddressOf crtl_KeyUp
End Sub
Private Sub crtl_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
'si on releve ta touche ,
'on annule le deplacement et le changement de taille
'pour permettre de travailler sur le texte
deplace = False
changetaille = False
End Sub
Private Sub crtl_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
' Vérification si la touche controle est active
'auquel cas on active le deplacement
If e.KeyCode = Keys.ControlKey Then
deplace = True
End If
'verification si la touche shif est activé
'auquel cas on active le changement de taille
If e.KeyCode = Keys.ShiftKey Then
changetaille = True
End If
End Sub
Private Sub ctrl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
' si le bouton gauche de la souris est enfoncé
'on recupere la position
If (e.Button = MouseButtons.Left) Then
poscourante = e.Location
End If
End Sub
Private Sub ctrl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
'si la souris passe sur le controle ,
' il devient le controle courant
ctrlEnCours = sender
'on affiche ses bordures (pour mieux travailler
ctrlEnCours.BorderStyle = BorderStyle.FixedSingle
' Vérification si bouton gauche de la souris est bien enfoncé
If (e.Button = MouseButtons.Left) Then
'ici on deplace le controle
If deplace = True Then
' Calcul de la nouvelle position du contrôle
ctrlEnCours.Location = New Point(ctrlEnCours.Location.X + e.X - poscourante.X, ctrlEnCours.Location.Y + e.Y - poscourante.Y)
End If
'ici on change la taille du controle
If changetaille = True Then
'calcul de la nouvelle taille du controle
If e.Y > ctrlEnCours.Height Then 'longeur
ctrlEnCours.Height = ctrlEnCours.Location.Y + e.Y
Else
ctrlEnCours.Height = e.Y
End If
If e.X > ctrlEnCours.Width Then 'largeur
ctrlEnCours.Width = ctrlEnCours.Location.X + e.X
Else
ctrlEnCours.Width = e.X
End If
End If
End If
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
' si le bouton gauche de la souris est enfoncé
'on recupere la position
If (e.Button = MouseButtons.Left) Then
positionClickForm = e.Location
End If
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
'si on se trouve sur la feuille et non au dessus d'un controle richtextbox
'on enleve les bordure du RTB sur lequel on etait et
'on annule le controle en cours
If Not ctrlEnCours Is Nothing Then
ctrlEnCours.BorderStyle = BorderStyle.None
ctrlEnCours = Nothing
End If
End Sub
End Class
Conclusion :
code sans pretention , je cherchait juste un moyen de pouvoir redimentionner mes RTB suivants leur contenu et pouvoir les placer ou je voulais sur ma form.
me reste plus qu'a enregistrer ma configuration qui pourra changer ou non suivants mes utilisations.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.