Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Collection contrôles

3 réponses
Avatar
Silve Hervé
Bonsoir et bonne Année 2009 à toutes et tous,

Venant de VB6 je suis un petit peu dérouté dans VB2008. J'ai deux petites
questions :

1) En VB6 on peut avoir les événements en commun quand on crée une
collection de contrôles comme par exemple des TextBox comme la proc
ci-dessous :

Private Sub TextBox_Change(Index As Integer)
Code...
End Sub

Est ce que cela existe encore dans VB2008 et comment faire ? Car quand je
copie un TextBox sur la Form et que je le colle à nouveau sur cette dernière
il ne m'est pas proposé la création d'une collection mais il est fait une
simple incrémentation du nom.

2) J'utilise une ListBox et là, je suis agréablement surpris de pouvoir
modifier la fonte pour certaines lignes mais je rencontre un petit problème,
quand j'augmente la taille de la police, je n'arrive pas à augmenter le
rectangle de sortie dans la ListBox et de ce fait mon texte est tronqué par
le bas. Une idée ? Voici le code :

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As
System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem

Dim FStyle As FontStyle = FontStyle.Italic + FontStyle.Bold
Dim F As New Font("Lucida Calligraphy", 20, FStyle)

Try
e.DrawBackground()

If e.Index = 4 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
F, Brushes.Blue, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
F.Height))
ElseIf e.Index <> -1 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
e.Font, Brushes.Black, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
e.Bounds.Height))
End If

Catch Ex As Exception
Debug.Print("Message d'erreur : " & Ex.Message)
End Try

End Sub

En vous remerciant par avance.

Hervé.

3 réponses

Avatar
Patrice
Bonjour,

1) Cela n'existe plus en tant que tel (peut-être dans le VBPowerPack ? Ou en
addin ?).

L'idée est d'utiliser maintenant des tableaux tout ce qu'il y a de plus
normaux. Par exemple :

Dim MyControls() As TextBox={TextBox1,TextBox3,MonAutreTextBox}
For i as Integer=0 to UBound(MyControls)
Mycontrols(i).Text="Hello World " & i
Next

Je m'aperçois qu'un papier comme
http://msdn.microsoft.com/fr-fr/library/aa289500(VS.71).aspx explique tout
cela y compris je crois comment éventuellement les créer dynamiquement...
Comme je disais précédemment je crois avoir vu un pack permettant de les
ajouter à nouveau si tu y tiens vraiment...

2) Tiré de la doc
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.drawitem.aspx :

"Si un élément est de taille variable (lorsque la propriété DrawMode a la
valeur DrawMode.OwnerDrawVariable) l'événement MeasureItem est déclenché
avant de dessiner un élément."

Donc gérer
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.measureitem.aspx
devrait résoudre ce problème.

Bonne continuation en 2009 sur VB 2008 ;-)


"Silve Hervé" a écrit dans le message de news:

Bonsoir et bonne Année 2009 à toutes et tous,

Venant de VB6 je suis un petit peu dérouté dans VB2008. J'ai deux petites
questions :

1) En VB6 on peut avoir les événements en commun quand on crée une
collection de contrôles comme par exemple des TextBox comme la proc
ci-dessous :

Private Sub TextBox_Change(Index As Integer)
Code...
End Sub

Est ce que cela existe encore dans VB2008 et comment faire ? Car quand je
copie un TextBox sur la Form et que je le colle à nouveau sur cette
dernière il ne m'est pas proposé la création d'une collection mais il est
fait une simple incrémentation du nom.

2) J'utilise une ListBox et là, je suis agréablement surpris de pouvoir
modifier la fonte pour certaines lignes mais je rencontre un petit
problème, quand j'augmente la taille de la police, je n'arrive pas à
augmenter le rectangle de sortie dans la ListBox et de ce fait mon texte
est tronqué par le bas. Une idée ? Voici le code :

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As
System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem

Dim FStyle As FontStyle = FontStyle.Italic + FontStyle.Bold
Dim F As New Font("Lucida Calligraphy", 20, FStyle)

Try
e.DrawBackground()

If e.Index = 4 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
F, Brushes.Blue, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
F.Height))
ElseIf e.Index <> -1 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
e.Font, Brushes.Black, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
e.Bounds.Height))
End If

Catch Ex As Exception
Debug.Print("Message d'erreur : " & Ex.Message)
End Try

End Sub

En vous remerciant par avance.

Hervé.




Avatar
Patrice
En complément :
http://msdn.microsoft.com/fr-fr/library/kxt4418a.aspx est sans doute encore
mieux sur le sujet (concis).

Pour les contrôles array en mode conception je pense que ma mémoire a
joyeusement mélangé entre
http://msdn.microsoft.com/fr-fr/library/microsoft.visualbasic.compatibility.vb6.textboxarray.aspx
(qui n'est utilisé que pour la mise à niveau de code) et un projet que
j'avais vu pour founrir à nouveau des contrôles "Shapes" en mode design (ils
ont également disparus).

Le meiux est de toute façon sans doute d"utliser les nouvelles techniques
donc :
- regrouper les contrôles dans un tableau si peu de contrôles
- les créer dynamiquement si beaucoup de contrôles

--
Patrice

"Patrice" <http://www..chez.com/scribe/> a écrit dans le message de news:
495fcca3$0$18395$
Bonjour,

1) Cela n'existe plus en tant que tel (peut-être dans le VBPowerPack ? Ou
en addin ?).

L'idée est d'utiliser maintenant des tableaux tout ce qu'il y a de plus
normaux. Par exemple :

Dim MyControls() As TextBox={TextBox1,TextBox3,MonAutreTextBox}
For i as Integer=0 to UBound(MyControls)
Mycontrols(i).Text="Hello World " & i
Next

Je m'aperçois qu'un papier comme
http://msdn.microsoft.com/fr-fr/library/aa289500(VS.71).aspx explique tout
cela y compris je crois comment éventuellement les créer dynamiquement...
Comme je disais précédemment je crois avoir vu un pack permettant de les
ajouter à nouveau si tu y tiens vraiment...

2) Tiré de la doc
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.drawitem.aspx :

"Si un élément est de taille variable (lorsque la propriété DrawMode a la
valeur DrawMode.OwnerDrawVariable) l'événement MeasureItem est déclenché
avant de dessiner un élément."

Donc gérer
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.measureitem.aspx
devrait résoudre ce problème.

Bonne continuation en 2009 sur VB 2008 ;-)


"Silve Hervé" a écrit dans le message de news:

Bonsoir et bonne Année 2009 à toutes et tous,

Venant de VB6 je suis un petit peu dérouté dans VB2008. J'ai deux petites
questions :

1) En VB6 on peut avoir les événements en commun quand on crée une
collection de contrôles comme par exemple des TextBox comme la proc
ci-dessous :

Private Sub TextBox_Change(Index As Integer)
Code...
End Sub

Est ce que cela existe encore dans VB2008 et comment faire ? Car quand
je copie un TextBox sur la Form et que je le colle à nouveau sur cette
dernière il ne m'est pas proposé la création d'une collection mais il est
fait une simple incrémentation du nom.

2) J'utilise une ListBox et là, je suis agréablement surpris de pouvoir
modifier la fonte pour certaines lignes mais je rencontre un petit
problème, quand j'augmente la taille de la police, je n'arrive pas à
augmenter le rectangle de sortie dans la ListBox et de ce fait mon texte
est tronqué par le bas. Une idée ? Voici le code :

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As
System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem

Dim FStyle As FontStyle = FontStyle.Italic + FontStyle.Bold
Dim F As New Font("Lucida Calligraphy", 20, FStyle)

Try
e.DrawBackground()

If e.Index = 4 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
F, Brushes.Blue, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
F.Height))
ElseIf e.Index <> -1 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
e.Font, Brushes.Black, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
e.Bounds.Height))
End If

Catch Ex As Exception
Debug.Print("Message d'erreur : " & Ex.Message)
End Try

End Sub

En vous remerciant par avance.

Hervé.








Avatar
Silve Hervé
Bonjour Patrice,

Merci pour la réponse et les liens.
Pour les collections de contrôles, je vais m'en passer et pour la listbox je
vais tester tous ça.

Bonne journée.

Hervé.


"Patrice" <http://www..chez.com/scribe/> a écrit dans le message de
news:495fcec1$0$18394$
En complément :
http://msdn.microsoft.com/fr-fr/library/kxt4418a.aspx est sans doute
encore mieux sur le sujet (concis).

Pour les contrôles array en mode conception je pense que ma mémoire a
joyeusement mélangé entre
http://msdn.microsoft.com/fr-fr/library/microsoft.visualbasic.compatibility.vb6.textboxarray.aspx
(qui n'est utilisé que pour la mise à niveau de code) et un projet que
j'avais vu pour founrir à nouveau des contrôles "Shapes" en mode design
(ils ont également disparus).

Le meiux est de toute façon sans doute d"utliser les nouvelles techniques
donc :
- regrouper les contrôles dans un tableau si peu de contrôles
- les créer dynamiquement si beaucoup de contrôles

--
Patrice

"Patrice" <http://www..chez.com/scribe/> a écrit dans le message de news:
495fcca3$0$18395$
Bonjour,

1) Cela n'existe plus en tant que tel (peut-être dans le VBPowerPack ? Ou
en addin ?).

L'idée est d'utiliser maintenant des tableaux tout ce qu'il y a de plus
normaux. Par exemple :

Dim MyControls() As TextBox={TextBox1,TextBox3,MonAutreTextBox}
For i as Integer=0 to UBound(MyControls)
Mycontrols(i).Text="Hello World " & i
Next

Je m'aperçois qu'un papier comme
http://msdn.microsoft.com/fr-fr/library/aa289500(VS.71).aspx explique
tout cela y compris je crois comment éventuellement les créer
dynamiquement... Comme je disais précédemment je crois avoir vu un pack
permettant de les ajouter à nouveau si tu y tiens vraiment...

2) Tiré de la doc
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.drawitem.aspx :

"Si un élément est de taille variable (lorsque la propriété DrawMode a la
valeur DrawMode.OwnerDrawVariable) l'événement MeasureItem est déclenché
avant de dessiner un élément."

Donc gérer
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listbox.measureitem.aspx
devrait résoudre ce problème.

Bonne continuation en 2009 sur VB 2008 ;-)


"Silve Hervé" a écrit dans le message de news:

Bonsoir et bonne Année 2009 à toutes et tous,

Venant de VB6 je suis un petit peu dérouté dans VB2008. J'ai deux
petites questions :

1) En VB6 on peut avoir les événements en commun quand on crée une
collection de contrôles comme par exemple des TextBox comme la proc
ci-dessous :

Private Sub TextBox_Change(Index As Integer)
Code...
End Sub

Est ce que cela existe encore dans VB2008 et comment faire ? Car quand
je copie un TextBox sur la Form et que je le colle à nouveau sur cette
dernière il ne m'est pas proposé la création d'une collection mais il
est fait une simple incrémentation du nom.

2) J'utilise une ListBox et là, je suis agréablement surpris de pouvoir
modifier la fonte pour certaines lignes mais je rencontre un petit
problème, quand j'augmente la taille de la police, je n'arrive pas à
augmenter le rectangle de sortie dans la ListBox et de ce fait mon texte
est tronqué par le bas. Une idée ? Voici le code :

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As
System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem

Dim FStyle As FontStyle = FontStyle.Italic + FontStyle.Bold
Dim F As New Font("Lucida Calligraphy", 20, FStyle)

Try
e.DrawBackground()

If e.Index = 4 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
F, Brushes.Blue, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
F.Height))
ElseIf e.Index <> -1 Then
e.Graphics.DrawString(ListBox1.Items(e.Index), _
e.Font, Brushes.Black, _
New RectangleF( _
e.Bounds.X, _
e.Bounds.Y, _
e.Bounds.Width, _
e.Bounds.Height))
End If

Catch Ex As Exception
Debug.Print("Message d'erreur : " & Ex.Message)
End Try

End Sub

En vous remerciant par avance.

Hervé.