Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBNET - line vs lineshape

22 views
Skip to first unread message

Antonios

unread,
Dec 19, 2009, 5:16:30 AM12/19/09
to
Premetto che provengo da VB6
-e prima ancora da Qbasic e prima ancora dal Basic v.2 commodore :) -
mi sto rendendo conto che form1.line
form1.circle cosi come picture1.line picture.circle...non esistono piu,
ho visto che ci sono i vari lineshape oval etc nella casella strumenti,
in vb6 potevo creare una "vettore" di Line1 ad esempio
creando Line1 copiandola e reincollandola... ovviamente in vbnet
non va pi�...
se volessi pre-creare come facevo in vb6
ad esempio 1001 lineshape1(xxxx) come potrei fare?

Luca D

unread,
Dec 20, 2009, 3:46:08 AM12/20/09
to
On Dec 19, 11:16 am, "Antonios" <tony...@virgilio.it> wrote:
> Premetto che provengo da VB6
> ho visto che ci sono i vari lineshape oval etc nella casella strumenti,
> in vb6 potevo creare una "vettore" di  Line1 ad esempio
> creando Line1 copiandola e reincollandola... ovviamente in vbnet
> non va più...

> se volessi pre-creare come facevo in vb6
> ad esempio 1001 lineshape1(xxxx) come potrei fare?

A design, non puoi più creare matrici di controlli, ma non sono
nemmeno più necessarie, perchè puoi ottenere gli stessi comportamenti
(e anche di più) semplicemente usando degli array/collection
convenzionali e i metodi AddHandler/RemoveHandler per gli eventi in
comune.

Fai pure i tuoi copia e incolla normalmente in design; a runtime, se
hai bisogno di raggruppare tutte o gruppi di linee, dichiara un
insieme qualunque (es: Dim MyLines as New List(Of LineShape) e
aggiungili

Antonios

unread,
Dec 20, 2009, 10:00:58 AM12/20/09
to


> A design, non puoi pi� creare matrici di controlli, ma non sono
> nemmeno pi� necessarie, perch� puoi ottenere gli stessi comportamenti
> (e anche di pi�) semplicemente usando degli array/collection


> convenzionali e i metodi AddHandler/RemoveHandler per gli eventi in
> comune.


potresti farmi un esempio pratico?


> Fai pure i tuoi copia e incolla normalmente in design; a runtime, se
> hai bisogno di raggruppare tutte o gruppi di linee, dichiara un
> insieme qualunque (es: Dim MyLines as New List(Of LineShape) e
> aggiungili

non ho capito bene: mi dovrei copia-incollare 1000 lineshape
che saranno lineshape1 lineshape2 lineshape3..etc e poi raggrupparle?
ma non sapendo a priori quante lineshape mi serviranno come fare?

Luca D

unread,
Dec 20, 2009, 11:53:13 AM12/20/09
to
On Dec 20, 4:00 pm, "Antonios" <tony...@virgilio.it> wrote:
>
> non ho capito bene: mi dovrei copia-incollare 1000 lineshape
> che saranno lineshape1 lineshape2 lineshape3..etc e poi raggrupparle?
> ma non sapendo a priori quante lineshape mi serviranno come fare?

Quando hai parlato di "copia e incolla" e "pre-creare" credevo dicessi
che volevi farle tutte in design-time.

Se vuoi crearle a runtime, allora non è molto diverso da come si
faceva in VB6, semplicemente generi nuove istanze di controlli e, se
vuoi, li raggruppi in uno o più array.

Prendi una form vuota e prova:

Public Class Form1

Dim labelList As New List(Of Label)

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

'Esempio basato su Label, ma è analogo per LineShape o qualunque
altro controllo
Dim lbl As Label

For i As Integer = 0 To 100
lbl = New Label
lbl.Name = "MiaLabel" & i
lbl.Text = lbl.Name
lbl.Location = New Point(0, i * 20)
lbl.Size = New Size(100, 20)

'esempio di evento condiviso da tutte le label della lista
AddHandler lbl.Click, AddressOf MiaLabel_Click

'le raggruppiamo in un array per simulare, eventualmente, il
vecchio sistema di VB6
labelList.Add(lbl)

'Aggiungiamo infine ogni controllo alla form stessa
Me.Controls.Add(lbl)
Next

End Sub

Private Sub MiaLabel_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs)

'in VB6 si usava "Index" per distinguere l'oggetto di una
matrice di controlli,
'in .NET ogni evento riceve "sender" che è un riferimento
all'oggetto stesso
'che ha scatenato l'evento

Dim currentLabel As Label = DirectCast(sender, Label)

For Each lbl As Label In labelList
lbl.BackColor = Me.BackColor
Next

Me.Text = "Click su " & currentLabel.Name
currentLabel.BackColor = Color.LightYellow

End Sub
End Class

Message has been deleted

Antonios

unread,
Dec 22, 2009, 5:45:52 AM12/22/09
to
se pu� servire anche ad altri ho mescolato un po di roba e sto
ottenendo il risultato voluto:

Public Class Form1

Dim labelList As New List(Of System.Windows.Forms.Label)

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

Dim Line As Label

For i As Integer = 0 To 100

Line = New System.Windows.Forms.Label

Line.Location = New Point(0, 14 * i)
Line.Size = New System.Drawing.Size(Me.Width, 3)
Line.BackColor = System.Drawing.Color.Blue

AddHandler Line.Click, AddressOf MiaLabel_Click

labelList.Add(Line)

Me.Controls.Add(Line)
Next

End Sub


Private Sub MiaLabel_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)

Dim currentLabel As Label = labelList(1) 'DirectCast(sender, Label)
Dim Line As Label
'For Each Line As Label In labelList
Line = currentLabel
Line.BackColor = Color.Red

End Sub

End Class

Luca D

unread,
Dec 22, 2009, 1:17:32 PM12/22/09
to
On Dec 22, 11:45 am, "Antonios" <tony...@virgilio.it> wrote:
> se può servire anche ad altri ho mescolato un po di roba e sto
> ottenendo il risultato voluto:
>[...]

>     Private Sub MiaLabel_Click(ByVal sender As System.Object, ByVal e As
> System.EventArgs)
>
>         Dim currentLabel As Label = labelList(1) 'DirectCast(sender, Label)
>         Dim Line As Label
>         'For Each Line As Label In labelList
>         Line = currentLabel
>         Line.BackColor = Color.Red
>
>     End Sub
>
> End Class

Non capisco il significato di "Dim currentLabel As Label = labelList
(1)" (ad ogni click peschi la seconda label nell'array, qualunque sia
il sender); ma se va bene a te...

Antonios

unread,
Dec 22, 2009, 1:42:45 PM12/22/09
to

> Non capisco il significato di "Dim currentLabel As Label = labelList
> (1)" (ad ogni click peschi la seconda label nell'array, qualunque sia
> il sender); ma se va bene a te...

nemmeno io...
se non facevo cosi non mi permetteva di metterci il valore 1 o 2 o 100
in labelList(xxx) e non riuscivo a usare la line che volevo...
ma i controlli activex sono spariti ... vero?

Luca D

unread,
Dec 22, 2009, 2:09:23 PM12/22/09
to
On Dec 22, 7:42 pm, "Antonios" <tony...@virgilio.it> wrote:
> > Non capisco il significato di "Dim currentLabel As Label = labelList
> > (1)" (ad ogni click peschi la seconda label nell'array, qualunque sia
> > il sender); ma se va bene a te...
>
> nemmeno io...
> se non facevo cosi non mi permetteva di metterci il valore 1 o 2 o 100
> in labelList(xxx) e non riuscivo a usare la line che volevo...

?!?

> ma i controlli activex sono spariti ... vero?

Non sono più "activex" ma ci sono sempre

Antonios

unread,
Dec 23, 2009, 3:03:45 AM12/23/09
to
>> in labelList(xxx) e non riuscivo a usare la line che volevo...
>
> ?!?

prima non riuscivo a usare la labelList() che volevo io,
il tuo programma al click su una qualsiasi linea le
colorava tutte...cmq sei stato ... fondamentale!


Private Sub MiaLabel_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)

Dim Line As Label
Line = labelList(1)
Line.BackColor = Color.Red

end sub

quando clicco una qualsiasi linea mi si colora la seconda (quella che
voglio).

Private Sub MiaLabel_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)

Dim Line As Label
Line = DirectCast(sender, Label)
Line.BackColor = Color.Red

End Sub

cosi invece mi si colora quella che clicco.


0 new messages