OVH Cloud OVH Cloud

Eléments indexés

3 réponses
Avatar
Thierry Bertrand
Dommage qu'ils aient disparus, les contrôles indexés de VB6.
Car pour moi, leur utilité était surtout pour créer des contrôles
dynamiquement dans une forme.

Juste un Label1(0) dans la forme de départ, puis des load label1(i)
successifs et hop, je créé de nouveaux objets label dans ma forme.

La transposition de ce genre d'application utilise des
"microsoft.visualbasic.compatibilty.VB6.xxxArray" qui les remplacent.

Question: comme cette classe implémente mieux que je ne le ferai moi même ce
comportement indexé, je ne vais donc pas essayer de les refaire, MAIS la
compatibilité (la fameuse compatibilité) est-elle assurée sur ces objets
(sachant les exemples fournis dans les bouquins microsoft .NET de fin 2002
ne fonctionnent plus à mi 2004 directement car les classes d'objets ont
évolués entre temps) car il faut quand même continuer à maintenir des
applications au delà de 18 mois.

Ou alors y-a-t-il une bibliothèque tierce partie qui impléme ces contrôles,
(surtout s'il y a le source ...)

Ou alors, mais uniquement si y'a pas le choix, dois-je MOI MEME les
implémenter (SVP: répondez moi que NON sinon ...)

3 réponses

Avatar
Patrick Philippot
Bonjour,

Dommage qu'ils aient disparus, les contrôles indexés de VB6.
Car pour moi, leur utilité était surtout pour créer des contrôles
dynamiquement dans une forme.

Juste un Label1(0) dans la forme de départ, puis des load label1(i)
successifs et hop, je créé de nouveaux objets label dans ma forme.



On peut faire exactement la même chose en .Net. Vous pouvez instancier
dynamiquement n'importe quel contrôle et l'ajouter à votre Form.

http://www.vbcodesource.com/downloads/addCtlsRuntimeExNet.zip
http://support.microsoft.com/default.aspx?scid=kb;EN-US;815779
http://www.c-sharpcorner.com/winforms/DynamicControlsCBNov13.asp

Le fait que les gestionnaires d'événements puissent être partagés sans
problème par plusieurs contrôles, voire être activés / désactivés à
l'exécution (AddHandler / RemoveHandler), rend d'ailleurs les choses
encore plus souples.

La transposition de ce genre d'application utilise des
"microsoft.visualbasic.compatibilty.VB6.xxxArray" qui les remplacent.



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchcreatingcontrolarraysinvisualbasicnetvisualcnet.asp
http://visualbasic.about.com/b/a/106905.htm

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Thierry Bertrand
Cela ne m'a pas semblé aussi simple, en tout cas quand j'ai commencé ma
transposition, car j'ai essayé d'être "propre" et je voulais supprimer
toutes ces références pas très nettes (jeu de mot ...)
mais j'ai abandonné, peut être un peu vite. Soit (mais je fatigue des
neurones ...)

Je vais donc prendre le temps de parcourir les références que vous indiquez,
s'il faut VRAIMENT que je travaille PLUS ...

Merci en tout cas.


"Patrick Philippot" a écrit dans le
message de news: Oe9tgf#
Bonjour,

> Dommage qu'ils aient disparus, les contrôles indexés de VB6.
> Car pour moi, leur utilité était surtout pour créer des contrôles
> dynamiquement dans une forme.
>
> Juste un Label1(0) dans la forme de départ, puis des load label1(i)
> successifs et hop, je créé de nouveaux objets label dans ma forme.

On peut faire exactement la même chose en .Net. Vous pouvez instancier
dynamiquement n'importe quel contrôle et l'ajouter à votre Form.

http://www.vbcodesource.com/downloads/addCtlsRuntimeExNet.zip
http://support.microsoft.com/default.aspx?scid=kb;EN-US;815779
http://www.c-sharpcorner.com/winforms/DynamicControlsCBNov13.asp

Le fait que les gestionnaires d'événements puissent être partagés sans
problème par plusieurs contrôles, voire être activés / désactivés à
l'exécution (AddHandler / RemoveHandler), rend d'ailleurs les choses
encore plus souples.

> La transposition de ce genre d'application utilise des
> "microsoft.visualbasic.compatibilty.VB6.xxxArray" qui les remplacent.




http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechar
t/html/vbtchcreatingcontrolarraysinvisualbasicnetvisualcnet.asp
http://visualbasic.about.com/b/a/106905.htm

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr




Avatar
Thierry Bertrand
J'y croyais pas, et pourtant c'est vrai. C'est assez simple finalement.
Pour la beauté du coup, et parce qu'il y a sûrement des débutants en .net
aussi ici, ci dessous un source très simple (basé sur une forme avec deux
boutons) qui créé des labels dynamiquement possédant un index, une méthode
unload (juste pour le plaisir...) et qui répondent au click.
Stockés dans une liste, on peut les manipuler comme on veut...

Maitenant, au boulot de transpo complète pour des sources plus nets (bon ok,
je l'ai déjà faite celle là) :-)))

Public Class Form1

Inherits System.Windows.Forms.Form

code généré par le Conceoteur Windows Forms

' ici commence le boulot

#Region "définition du lblArray"



Public Class LblArray

Inherits System.Windows.Forms.Label

Private lIndex As Long

Public Sub New()

MyBase.new()

AddHandler Me.Click, AddressOf lblClicked

End Sub



Public Sub Unload()

MyBase.Finalize()

End Sub



Public Property Index() As Long

Get

Index = lIndex

End Get

Set(ByVal Value As Long)

lIndex = Value

End Set

End Property



Private Sub lblClicked(ByVal source As Object, ByVal e As EventArgs)

MsgBox("Ce message provient du label dynamique n°" & Str(Index))

End Sub

End Class

#End Region

' fin du boulot

Dim NbLabels As Integer

Dim LstlblCTL As New Collection



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim lblCTL As LblArray

lblCTL = New LblArray

NbLabels = NbLabels + 1

lblCTL.Index = NbLabels

lblCTL.Width = 50

lblCTL.Left = (NbLabels * (10 + lblCTL.Width))

lblCTL.Top = 10

lblCTL.Height = 20

lblCTL.Text = "Label" & Str(NbLabels)

lblCTL.Visible = True

lblCTL.BackColor = System.Drawing.Color.White

Me.Controls.Add(lblCTL)

LstlblCTL.Add(lblCTL)

End Sub



Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load

NbLabels = -1

End Sub



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click

Dim i As Integer

Dim lblCTL As LblArray

For Each lblCTL In LstlblCTL

lblCTL.Unload()

Next

LstlblCTL = New Collection

NbLabels = -1

End Sub

End Class