PhiChe
Messages postés6Date d'inscriptionlundi 5 février 2018StatutMembreDernière intervention28 février 2018
-
5 févr. 2018 à 17:34
PhiChe
Messages postés6Date d'inscriptionlundi 5 février 2018StatutMembreDernière intervention28 février 2018
-
15 févr. 2018 à 13:46
Bonjour,
Je souhaite créer des contrôles de manière dynamique. J'ai le même résultat avec des buttons ou des labels, à savoir des contrôles tronqués au-delà d'une certaine taille ou plutôt d'un certain espacement des contrôles.
Je m'explique : si je choisis de faire se chevaucher les contrôles, ils s'affichent tous mais évidemment, ce n'est pas satisfaisant. Au delà d'un certain écartement, seuls les 2, 3 ou 4 premiers contrôles s'affichent. Par exemple, je n'aurai qu'une partie du 4° contrôle et les contrôles suivants ne s'afficheront pas.
J'ai tenté la même chose en insérant les contrôles dans un panel, mais le résultat est identique.
De plus, j'ai le même souci en les rangeant l'un à côté de l'autre ou l'un au-dessus de l'autre.
VB ne génère pas d'erreur.
Bizarre autant qu'étrange !
Merci à ceux qui voudront bien me donner un coup de main.
Voici le code :
Public Class frmCartes10Par5
Dim TableauNombres As Panel = New Panel
Dim btnNombre() As Button
Private Sub frmCartes10Par5_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Me.Controls.Add(TableauNombres)
For i As Integer = 0 To 10
ReDim Preserve btnNombre(i)
btnNombre(i) = New Button
With btnNombre(i)
.Font = New System.Drawing.Font("Trebuchet", 18, FontStyle.Bold)
.TextAlign = ContentAlignment.BottomCenter
.Text = i.ToString
.BackColor = Color.Blue
.ForeColor = Color.White
.AutoSize = True
If i > 0 Then
.Left = btnNombre(i - 1).Left + btnNombre(i - 1).Width
Else
.Left = 10
End If
.Top = 50
End With
AddHandler btnNombre(i).Click, AddressOf btnNombre_Click
Me.TableauNombres.Controls.Add(btnNombre(i))
Next i
End Sub
Private Sub btnNombre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Index As Integer = TableauNombres.Controls.IndexOf(sender)
Me.Text = "Clic sur Bouton " & Index
End Sub
End Class
PhiChe
Messages postés6Date d'inscriptionlundi 5 février 2018StatutMembreDernière intervention28 février 2018 6 févr. 2018 à 11:01
Normalement, je ne devrais pas avoir de souci d'affichage, sauf erreur de ma part. Voici l'image du résultat sur mon écran pour une explication plus claire :
Comme vous le voyez, le Button "2" est tronqué et les Buttons "3" à "9" ne sont pas affichés.
Si je choisis de les disposer verticalement, j'ai le même souci : à partir d'une certaine zone, il y a effacement de tout ou partie des Buttons.
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137 Modifié le 6 févr. 2018 à 11:40
Un exemple avec une adaptation du lien que je t'ai donné:
Mettre dans un Form de 545 x 260 ce code:
Option Strict On
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim j As Integer
Dim vignette As Integer
Dim x, y, diff, dify As Int32
vignette = 100
Dim TableauNombres As Panel = New Panel
Me.Controls.Add(TableauNombres)
TableauNombres.Size = New Size(500, 200) 'a adapter
TableauNombres.Location = New Point(10, 10) 'a adapter
For j = 1 To 10
Dim btnNombre As New Button
With btnNombre
.Font = New System.Drawing.Font("Trebuchet", 18, FontStyle.Bold)
.TextAlign = ContentAlignment.BottomCenter
.Text = "BTN" & j
.Name = "Monbouton " & j
.BackColor = Color.Blue
.ForeColor = Color.White
.AutoSize = True
End With
btnNombre.SetBounds(x, y, vignette, vignette)
x += vignette
'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter un button
If x >= TableauNombres.Width Or (x + vignette) > TableauNombres.Width Then
diff = TableauNombres.Width - x
'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
y += vignette
x = 0
End If
If ((y + vignette) > TableauNombres.Height) Then
dify = TableauNombres.Height - y
End If
AddHandler btnNombre.Click, AddressOf btnNombre_Click
TableauNombres.Controls.Add(btnNombre)
Next j
End Sub
Private Sub btnNombre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
' On récupère le contrôle cliqué ...
Dim Index As Button = DirectCast(sender, Button)
Me.Text = Index.Text
MsgBox(Index.Name)
End Sub
End Class
Ensuite en jouant sur les dimensions du Panel tu pourras mettre les buttons a ta convenance!
PhiChe
Messages postés6Date d'inscriptionlundi 5 février 2018StatutMembreDernière intervention28 février 2018 7 févr. 2018 à 16:27
Parfait : ça fonctionne.
Venant de VB6, je suis confronté à pas mal de changements dans VB Net qui me laissent parfois sans solution immédiate (je travaillais beaucoup avec les index de contrôles).
Merci d'avoir passé du temps pour résoudre mon problème.
A propos, sais-tu comment signifier que le problème est résolu sur le site ? Je ne trouve pas la commande sur la page.
A bientôt.
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137 7 févr. 2018 à 16:35
J'avais repris l'ancien code avec des PictureBox carrées, mais si tu veux des buttons rectangulaires, il suffit de modifier comme ceci:
Dim j As Integer
' Dim vignette As Integer
Dim largeur, hauteur As Integer
Dim x, y, diff, dify As Int32
' vignette = 100
largeur = 100
hauteur = 50
Dim TableauNombres As Panel = New Panel
Me.Controls.Add(TableauNombres)
TableauNombres.Size = New Size(600, 200) 'a adapter
TableauNombres.Location = New Point(10, 10) 'a adapter
For j = 1 To 10
Dim btnNombre As New Button
With btnNombre
.Font = New System.Drawing.Font("Trebuchet", 18, FontStyle.Bold)
.TextAlign = ContentAlignment.BottomCenter
.Text = "BTN" & j
.Name = "Monbouton" & j
.BackColor = Color.Blue
.ForeColor = Color.White
.AutoSize = True
End With
btnNombre.SetBounds(x, y, largeur, hauteur)
x += largeur + 20
'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter une image
If x >= TableauNombres.Width Or (x + largeur) > TableauNombres.Width Then
diff = TableauNombres.Width - x
'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
y += hauteur + 30
x = 0
End If
If ((y + largeur) > TableauNombres.Height) Then
dify = TableauNombres.Height - y
End If
AddHandler btnNombre.Click, AddressOf btnNombre_Click
TableauNombres.Controls.Add(btnNombre)
Next j
Pour Résolu, c'est la roue crantée en haut à droite
@+ Le Pivert
PhiChe
Messages postés6Date d'inscriptionlundi 5 février 2018StatutMembreDernière intervention28 février 2018 15 févr. 2018 à 13:46