Modificare il testo di una Label creata runtime

di il
30 risposte

Modificare il testo di una Label creata runtime

Salve a tutti, ho creato con il codice una label con Text = “”. Premendo un pulsante, creato anch'esso con il codice vorrei aggiungere un testo alla Label precedente. Come si può fare? L'evento “click” è stato correttamente gestito.

Grazie e a presto.

30 Risposte

  • Re: Modificare il testo di una Label creata runtime

    14/05/2024 - joker7421 ha scritto:


    Salve a tutti, ho creato con il codice una label con Text = “”. Premendo un pulsante, creato anch'esso con il codice vorrei aggiungere un testo alla Label precedente. Come si può fare?

    TuaLabel.Text = TuaLabel.Text + "Metti il testo qui"

    14/05/2024 - joker7421 ha scritto:


    L'evento “click” è stato correttamente gestito.

    Se lo dici tu, ci fidiamo, anche se non vedendo il codice….

  • Re: Modificare il testo di una Label creata runtime

    Questa richiesta mi lascia perplesso.

    Se non sai modificare il testo di una Label (l'abc) come farai a scrivere il resto del codice del tuo programma?

  • Re: Modificare il testo di una Label creata runtime

    14/05/2024 - oregon ha scritto:


    Se non sai modificare il testo di una Label (l'abc) come farai a scrivere il resto del codice del tuo programma?

    Chiedendo “una mano” al forum. ;)

  • Re: Modificare il testo di una Label creata runtime

        Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim x As Integer = 20
            Dim y As Integer = 20
            Dim wb As Integer = 300
            Dim hb As Integer = 200
            Dim wd As Integer = Me.Width - 60
            Dim hd As Integer = 200
            Dim FontD As New Font("Calibri", 80, FontStyle.Bold)
            Dim FontB As New Font("Calibri", 54, FontStyle.Bold)
    
            Dim LblDisplay As New Label With {
                .Size = New Size(wd, 200),
                .Location = New Point(x, y),
                .BorderStyle = BorderStyle.Fixed3D,
                .BackColor = Color.LightGray,
                .Font = FontD,
                .TextAlign = ContentAlignment.MiddleRight
            }
            Controls.Add(LblDisplay)
    
            Dim BtnMain As New Button With {
                .Size = New Size(wb, hb),
                .Location = New Point(x, y + hd + 5),
                .BackColor = Color.DarkGray,
                .Font = FontB,
                .Text = "Main"
            }
            Controls.Add(BtnMain)
            AddHandler BtnMain.Click, AddressOf BtnMain_Click
            AddHandler BtnMain.MouseHover, AddressOf BtnMain_MouseHover
    End Sub
    
        Private Sub BtnMain_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    
            LblDisplay.text = "MAIN"         '=======> ERRORE <===========
    
        End Sub
    

    Grazie per le risposte …però, credo, siate stati un po' duri e malpensanti nel credere che non sapessi l'ABC.
    Sicuramente l'errore è una stupidaggine ma che , in questo momento, non riesco proprio a capire.

    Quando faccio riferimento alla Label “LblDisplay”, il suggeritore non la propone proprio. Ho provato ad assegnare il Text anche con Controls("LblDisplay").text = “Menu Principale” ma stesso effetto.

    Alla fine, mentre sto scrivendo questo post, ho pensato alla proprietà Item della collection Controls ed ho risolto così:

            Controls.Item(0).Text = "MENU PRINCIPALE"
    

    Grazie e a presto.

  • Re: Modificare il testo di una Label creata runtime

    15/05/2024 - joker7421 ha scritto:


    Grazie per le risposte …però, credo, siate stati un po' duri e malpensanti nel credere che non sapessi l'ABC.

    Può darsi. Vediamo.

    15/05/2024 - joker7421 ha scritto:


    Quando faccio riferimento alla Label “LblDisplay”, il suggeritore non la propone proprio.

    Certo, e ne ha ragione: non è un campo del Form, e dove tu stai utilizzando quell'identificatore LblDisplay, stai facendo riferimento a una variabile che non esiste in quel contesto, anche perché è dichiarata nell'altro metodo della classe.

    Cos'è un campo? Cos'è lo “scope”? Cos'è un metodo? E una classe?

    Se non hai ben presente questi concetti, è chiaro che non puoi spiegarti il motivo per cui il tuo codice non funziona (sempre che l'abbia scritto interamente tu, visto che tu stesso non sai cosa fa). E si tratta dell'ABC.

    Tuttavia, sono certo che si tratti dell'ora tarda: non vorrei mai essere duro né malpensante. :)

  • Re: Modificare il testo di una Label creata runtime

    In pratica il codice sarebbe 

        Dim LblDisplay As Label
        Dim BtnMain As Button
        
        Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim x As Integer = 20
            Dim y As Integer = 20
            Dim wb As Integer = 300
            Dim hb As Integer = 200
            Dim wd As Integer = Me.Width - 60
            Dim hd As Integer = 200
            Dim FontD As New Font("Calibri", 80, FontStyle.Bold)
            Dim FontB As New Font("Calibri", 54, FontStyle.Bold)
    
            LblDisplay = New Labe7l
            With LblDisplay
                .Size = New Size(wd, 200)
                .Location = New Point(x, y)
                .BorderStyle = BorderStyle.Fixed3D
                .BackColor = Color.LightGray
                .Font = FontD
                .TextAlign = ContentAlignment.MiddleRight
            End With
            Controls.Add(LblDisplay)
    
            BtnMain = New Button
            With BtnMain
                .Size = New Size(wb, hb)
                .Location = New Point(x, y + hd + 5)
                .BackColor = Color.DarkGray
                .Font = FontB
                .Text = "Main"
            End With
            Controls.Add(BtnMain)
            AddHandler BtnMain.Click, AddressOf BtnMain_Click
            AddHandler BtnMain.MouseHover, AddressOf BtnMain_MouseHover
    End Sub

    Non te la prendere ma non conoscere la nozione di scope giustifica l'affermazione di non conoscere l'abc della programmazione OOP (e programmazione in genere). Non è una questione di essere “duri” o “malpensanti” ma di capire che non hai letto a sufficienza un libro sulla programmazione VB.NET prima di cominciare a scrivere codice perché lo scope tra i primi capitoli con le variabili e i membri delle classi.

    E' un concetto fondamentale per la prosecuzione della scrittura di codice.

  • Re: Modificare il testo di una Label creata runtime

    Grazie per le risposte

    15/05/2024 - Alka ha scritto:

    Tuttavia, sono certo che si tratti dell'ora tarda: non vorrei mai essere duro né malpensante. :)

    Hai capito perfettamente :-)

    15/05/2024 - oregon ha scritto:


    In pratica il codice sarebbe 

        Dim LblDisplay As Label
        Dim BtnMain As Button

    Quando hai parlato di “Scope” sono andato in crisi profonda … poi ho capito che si parlava di Ambito ed ho ripreso un po' di fiato.

    Ero troppo preso dalla progettazione “runtime” per pensare all'ambito delle due variabili.

    Per correttezza o semplicità è meglio dichiararle in ambito modulo/classe o fare riferimento ad esse con la collezione dei controlli e quindi con “Controls.Item(n)” ?

    Grazie e a presto.

  • Re: Modificare il testo di una Label creata runtime

    16/05/2024 - joker7421 ha scritto:


    Quando hai parlato di “Scope” sono andato in crisi profonda … poi ho capito che si parlava di Ambito ed ho ripreso un po' di fiato.

    Se un termine espresso in inglese - come lo troverai scritto ovunque - ti manda in “crisi profonda”, la veggo buia.

    16/05/2024 - joker7421 ha scritto:


    Ero troppo preso dalla progettazione “runtime” per pensare all'ambito delle due variabili.

    “Progettazione runtime” manda invece ME in crisi profonda. :)

    16/05/2024 - joker7421 ha scritto:


    Per correttezza o semplicità è meglio dichiararle in ambito modulo/classe o fare riferimento ad esse con la collezione dei controlli e quindi con “Controls.Item(n)” ?

    Dipende da cosa devi fare, ma se crei un campo che contiene un riferimento al controllo e usi il nome di quel campo per accedervi, non hai bisogno di usare Controls.Item(), anche perché in quel caso devi conoscere esattamente l'indice del controllo dentro la Collection, oppure andarlo a cercare con un ciclo.

  • Re: Modificare il testo di una Label creata runtime

    16/05/2024 - Alka ha scritto:


    Se un termine espresso in inglese - come lo troverai scritto ovunque - ti manda in “crisi profonda”, la veggo buia.

    Ti sembrerà strano ma ho sempre letto di “Ambito” e mai di “Scope” .

    16/05/2024 - Alka ha scritto:


    “Progettazione runtime” manda invece ME in crisi profonda. :)

    sono qui solo per imparare; quali sono i termini giusti?

    16/05/2024 - Alka ha scritto:


    Dipende da cosa devi fare, ma se crei un campo che contiene un riferimento al controllo e usi il nome di quel campo per accedervi, non hai bisogno di usare Controls.Item(), anche perché in quel caso devi conoscere esattamente l'indice del controllo dentro la Collection, oppure andarlo a cercare con un ciclo.

    Effettivamente, con tanti controlli creati dovresti contarli ogni volta.

    Grazie ancora e a presto.

  • Re: Modificare il testo di una Label creata runtime

    16/05/2024 - joker7421 ha scritto:


    Ti sembrerà strano ma ho sempre letto di “Ambito” e mai di “Scope” .

    “Ambito” è generico: meglio “scope” o in italiano “visibilità”.

    16/05/2024 - joker7421 ha scritto:


    sono qui solo per imparare; quali sono i termini giusti?

    Non lo so, perché “progettazione runtime” non è chiaro cosa voglia dire.

    16/05/2024 - joker7421 ha scritto:


    Effettivamente, con tanti controlli creati dovresti contarli ogni volta.

    Esatto, quindi meglio evitarlo: non sarà un problema gravoso per l'applicazione, ma evitare cicli inutili è sempre un'ottima idea.

  • Re: Modificare il testo di una Label creata runtime

    Per trovare un controllo in Controls potresti usare Find , https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.controlcollection.find?view=windowsdesktop-8.0

  • Re: Modificare il testo di una Label creata runtime

    17/05/2024 - gian82 ha scritto:


    Per trovare un controllo in Controls potresti usare Find , https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.controlcollection.find?view=windowsdesktop-8.0

    …che internamente fa un ciclo, quindi se la uso più volte, ogni volta faccio un ciclo per ottenere il riferimento a un controllo, e se mi servono più controlli, ogni volta che cerco uno dei controlli fa un ciclo, e N cicli ogni volta che devo fare queste ricerche.

    Il metodo è comodo per accessi molto “basic” ed estemporanei, ma cercherei di evitarlo il più possibile, soprattutto se i controlli vengono creati a runtime, come in questo caso: che senso ha mettere il riferimento a un controllo in una variabile per dimenticarselo, e poi cercarlo per il nome? basta utilizzare il riferimento precedentemente memorizzato.

  • Re: Modificare il testo di una Label creata runtime

    Nel codice 

    Dim LblDisplay As New Label With {
                .Size = New Size(wd, 200),
                .Location = New Point(x, y),
                .BorderStyle = BorderStyle.Fixed3D,
                .BackColor = Color.LightGray,
                .Font = FontD,
                .TextAlign = ContentAlignment.MiddleRight
            }

    devi aggiungere

    .Name = "QuelloCheVuoiTu"

    a questo punto dovresti fare

    Controls("QuelloCheVuoiTu").text = “Menu Principale”
  • Re: Modificare il testo di una Label creata runtime

    Ciao,

    io quando creo un controllo a runtime lo richiamo con il comando:

    Dim lbls() As Control = Me.Controls.Find(ControlName, True) 
    Dim lbl As Label = CType(lbls(0), Label) 

    Basta cambiare il tipo di controllo, Label, Button, TextBox, …. ecc.

Devi accedere o registrarti per scrivere nel forum
30 risposte