Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    [VB6] creare label in fase di esecuzione

    ciao a tutti, sono nuovo qui e vi chiedo perdono se la mia domanda potrà sembrare stupida.
    è possibile, in fase di esecuzione del programma, attraverso un comando, creare ad esempio una label?
    se si come?

  2. #2
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    ?

    qualcuno puo rispondere? basta anche un "no, non si puo fare"

  3. #3
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao Artemio,
    creare un controllo (ad esempio Label) partendo da zero è un pò laborioso rispetto ad un altro metodo, Load, che prevede però il disegno sulla form del primo controllo. Posto un esempio.
    Inserisci il tutto nel modulo di una Form:
    codice:
    'Crea una Label senza l'uso di matrice di controlli:
    Private WithEvents lblobj As Label
    '---------------------------------------------------
    Private Sub Command1_Click()
    
        Dim lblobj As Label
        Dim lblobjev As Label
       
        Call Aggiungi_Label("lblRunTime", Me)
        
        Set lblobj = Oggetto("lblRunTime", Me)
    
        'Proprietà della Label:
        lblobj.Left = 2000
        lblobj.Top = 2000
        lblobj.Visible = True
        lblobj.Alignment = 2
        lblobj.AutoSize = True
        lblobj.Caption = "Prova di costruzione"
        lblobj.BackColor = &HE0E0E0
        lblobj.ForeColor = &HFF&
        lblobj.BorderStyle = 1
        lblobj.Left = 3100
        lblobj.Top = 3100
    
    End Sub
    '---------------------------------------------------
    Public Sub Aggiungi_Label(sNome As String, NomeForm As Form)
        
        Dim lblControl1  As Label
        Set lblControl1 = NomeForm.Controls.Add("VB.Label", sNome)
    
    End Sub
    '---------------------------------------------------
    Public Function Oggetto(sNome As String, NomeForm As Form) As Control
        
        Dim obj As Control
         
        For Each obj In NomeForm.Controls
            If obj.Name = sNome Then
                Set Oggetto = obj
                Exit For
            End If
        Next
    End Function
    LM

  4. #4
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    THX 1k

    grazie mille!!!
    l'ho appena provato e funziona... xo prima parlavi del metodo Load... questo che hai scritto sarebbe il Load?
    a... c'e un'altro prob come devo fare se ne devo creare piu di una? ad esempio cliccando su un cmd vorrei che creasse ad esempio 2 label, e cliccando su un'altro cmd dovrebbe crearne tipo 3... come posso fare? grazie ancora!!! spero di non averti disturbato

  5. #5
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    hmmm

    mmm... nn so se esita un metodo migliore... ma per creare più label da un pulsante come scritto sopra... mi basta utilizzare un semplice ciclo giusto? xo mi sorge un'altro prob... nel codice ke mi hai scritto dov'è che definisce il name della label? in modo ke io possa modificarlo a mio piacimento... (se si può fare)

  6. #6
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    la soluzione di LMondi è ottima, e ti consente di creare un numero indefinito di controlli Label

    ma io proporrei una seconda soluzione, che probabilmente ti agevolerà le cose, visto che poi la rintracciabilità del controllo è più agevole.

    potresti utilizzare una Matrice di controlli Label

    questa si ottiene, ponendo sul form un controllo Label che farà da "base" al quale assegnerai la proprietà Index = 0

    questo controllo puoiache renderlo invisibile già in fase di progettazione.

    mettiamo caso che la tua label di partenza si chiami Label1

    nel momento in cui te ne serve una scrivi:

    codice:
    Load Label1(Label1.UBound+1)
    questa istruzione carica una nuova label con proprietà Index, ovvero con indice susseguente all'ultimo utilizzato.

    la label però rimarrà invisibile, quindi sarà necessario spostarla utilizzando le proprietà Left e Top e renderla visibile utilizzando la proprietà Visible = True

    il vantaggio di questo metodo è che puoi già organizzare le routines di evento relative alla label "base" poichè tutte le label aggiunte condivideranno le stesse routines...

    Boolean

  7. #7
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178
    @Boolean hmmm... ho capito come fare... e funziona... ma se io con un pulante volessi fargli creare ad esempio 100 label, dovrei scrivere 100 volte il codice

    codice:
    Load Label1(Label1.ubound + 1)
    Label1(1).Visible = True
    Label1(1).Top = 1000
    Label1(1).Left = 1000
    ?

  8. #8
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    nient'affatto!

    basta un semplice ciclo:

    codice:
    For K=1 to 100
        Load Label1(Label1.ubound + 1)
        Label1(Label1.ubound).Visible = True
        Label1(Label1.ubound).Top = 1000 + ((K-1)*400)
        Label1(Label1.ubound).Left = 1000
    Next K
    così avrai 100 label incolonnate una sotto l'altra

    Boolean

  9. #9
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178
    thx ho capito tutto...pensa ke all'inizio avevo provato pure io a fare un ciclo... ma il mio andava in loop
    per quello poi ti ho chiesto^^ la soluzione era più facile di quanto credessi... (ma da solo non ci sarei mai arrivato )
    Grazie mille Boolean!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.