Tito464 ha scritto:
se posso e se hai voglia ti chiederei di spiegarmi solo questa parte di codice..
For Each lab As Label In arrLabel
Me.Controls.Add(lab)
Next
Se memorizzi le labels in un array di nome arrLabel, restano li e nessuno le vede.
Per visualizzarne una devi aggiungerla al form con l'istruzione:
Me.Controls.Add(arrLabel(1)) ' aggiunge al form la label all'indice 1, con tutte le proprietà memorizzate
se le vuoi vedere tutte, fai un ciclo:
For i = 0 to arrLabel.count - 1
Me.Controls.Add(arrLabel(i))
Next
o l'equivalente
For Each lab As Label In arrLabel, che le scansiona tutte una per una e le mette in
lab, poi aggiungi
lab sul form.
Per un lavoro del genere potresti usare invece di un array, una lista, più versatile, non devi ogni volta calcolare la dimensione e ridimensionare l'array.
Prova questo, con il tasto sinistro del mouse sposti le labels, con il tasto destro ne crei di nuove.
Option Strict On
Public Class Form1
Dim listLabel As New List(Of Label)
Dim Xp As Integer ' coordinata X al click del mouse nella label
Dim Yp As Integer ' coordinata Y al click del mouse nella label
Private Sub listLabel_MouseDown(sender As Object, e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then ' click mouse sinistro
Xp = e.X ' coordinata X mouse nella label al momento del click tasto sinistro, servirà per mantenere la posizione del cursore nella label
Yp = e.Y ' coordinata Y mouse nella label al momento del click tasto sinistro, servirà per mantenere la posizione del cursore nella label
End If
If e.Button = Windows.Forms.MouseButtons.Right Then ' click mouse destro, crea nuova
listLabel.Add(New Label) ' label creata
Dim lab As Label = CType(sender, Label)
Dim nLabel As Integer = listLabel.Count - 1
listLabel(nLabel).Location = New Point(lab.Left - 3, lab.Top - 3)
listLabel(nLabel).Text = nLabel.ToString() + " Dx crea nuova"
listLabel(nLabel).TextAlign = ContentAlignment.MiddleCenter
listLabel(nLabel).Tag = nLabel
listLabel(nLabel).BorderStyle = BorderStyle.FixedSingle
AddHandler listLabel(nLabel).MouseDown, AddressOf listLabel_MouseDown ' evento
AddHandler listLabel(nLabel).MouseMove, AddressOf listLabel_MouseMove ' evento
Me.Controls.Add(listLabel(nLabel))
listLabel(nLabel).BringToFront()
Me.Text = "Label create n. " + nLabel.ToString() ' info
End If
End Sub
Private Sub listLabel_MouseMove(sender As Object, e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then ' solo se mentre si muove il mouse, il tasto sinistro è premuto
Dim lab As Label = CType(sender, Label)
lab.Top = lab.Top + e.Y - Yp ' trascinamento Y sul form
lab.Left = lab.Left + e.X - Xp ' trascinamento X sul form
Me.Text = "Label " + lab.Tag.ToString() + " X: " + lab.Left.ToString() + " Y: " + lab.Top.ToString() ' info
End If
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
listLabel.Add(New Label) ' label 0 creata
listLabel(0).Location = New Point(10, 10)
listLabel(0).Text = "0 Dx crea nuova"
listLabel(0).TextAlign = ContentAlignment.MiddleCenter
listLabel(0).Tag = 0
listLabel(0).BorderStyle = BorderStyle.FixedSingle
AddHandler listLabel(0).MouseDown, AddressOf listLabel_MouseDown ' evento
AddHandler listLabel(0).MouseMove, AddressOf listLabel_MouseMove ' evento
Me.Controls.Add(listLabel(0))
End Sub
End Class