Label property..

di il
4 risposte

Label property..

Buongiorno,
sono nuovo quindi un saluto a tutti!
Sono l'ennesimo autodidatta trafficone che brancola nel buio, quindi abbiate pazienza per il livello dei quesiti..
Sto lavorando ad un progetto dove ho la necessità di mouovere una label in diverse posizioni di un form, una volta trovata la posizione giusta, vorrei copiare la posizione e tutte le proprietà della label in una array di labels, facendo poi comparire la label parte dell' array sul form.
Vorrei anche capire se è possibile copiare tutte le proprietà di una label, in un altra, senza doverle menzionare tutte una ad una?

Ho omesso la parte di codice utile a muovere LabelApp perchè funzionante, LabelApp non è dichiarata perchè è inserita direttamente nel form..


Public Class
    Dim nr_lbl As Integer
    Dim arrLabel() As Label

    Private Sub Presa(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_add_presa.Click

        arrLabel(nr_lbl) = LabelApp
        nr_lbl += 1

        labelApp.location = New Point(400, 400)
        labelApp.focus()

    End Sub
End Class    
    


grazie in anticipo

4 Risposte

  • Re: Label property..

    La dimensione della matrice va aggiornata, le proprietà copiate e per visualizzare quanto catturato ho aggiunto il bottone ButVisualizza
    Quando copi un oggetto in un'altro, la copia avviene per riferimento, nel tuo caso le copie delle label farebbero riferimento sempre alla stessa, tutte le label in matrice punterebbero alla stessa zona di memoria e al variare di una si varierebbero tutte le altre.
    
    Public Class Form1
       
        Dim nr_lbl As Integer
        Dim arrLabel() As 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 Presa(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_add_presa.Click
            ReDim Preserve arrLabel(nr_lbl) ' la dimensione della matrice aggiornata
    
            arrLabel(nr_lbl) = New Label ' nuova label creata
            arrLabel(nr_lbl).Location = LabelApp.Location ' i parametri di interesse copiati
            arrLabel(nr_lbl).Text = "copiata " + nr_lbl.ToString() ' i parametri nuovi creati
            arrLabel(nr_lbl).BorderStyle = BorderStyle.FixedSingle ' i parametri nuovi creati
            nr_lbl += 1 ' incremento prossimo indice label
    
            Me.Text = "Label catturate n. " + nr_lbl.ToString() ' info
        End Sub
    
        Private Sub LabelApp_MouseDown(sender As Object, e As MouseEventArgs) Handles LabelApp.MouseDown
            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
        End Sub
    
        Private Sub LabelApp_MouseMove(sender As Object, e As MouseEventArgs) Handles LabelApp.MouseMove
            If e.Button = Windows.Forms.MouseButtons.Left Then ' solo se mentre si muove il mouse, il tasto sinistro è premuto
                LabelApp.Top = LabelApp.Top + e.Y - Yp ' trascinamento Y sul form
                LabelApp.Left = LabelApp.Left + e.X - Xp ' trascinamento X sul form
            End If
        End Sub
    
        Private Sub ButVisualizza_Click(sender As Object, e As EventArgs) Handles ButVisualizza.Click
            For Each lab As Label In arrLabel
                Me.Controls.Add(lab)
            Next
        End Sub
    
    End Class
    
  • Re: Label property..

    Buongiorno Rubik, non hai idea dell'aiuto che mi hai dato,
    si, il problema che avevo infatti era proprio la variazione di tutte le labels,
    grazie infinite!!

    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

    grazie ancora!
  • Re: Label property..

    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
    
  • Re: Label property..

    Buongiorno Rubik,
    sei una favola!
    grazie davvero, questo codice è oro per me...
Devi accedere o registrarti per scrivere nel forum
4 risposte