+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Posizionare al centro del Form una Label

  1. #1
    Pacifico437 non è in linea Scolaretto
    Gent.mi,

    in un Form con Width 600 a sinistra, ho inserito una Label e gradirei che sia posizionata al centro.
    Con il seguente codice:
    this.Lbl_Titolo.Text = "Comandi";
       Graphics g = this.CreateGraphics();
       Double startingPoint = (this.Width / 2) - (g.MeasureString(this.Lbl_Titolo.Text.Trim(), this.Font).Width / 2);
       Double widthOfASpace = g.MeasureString(" ", this.Font).Width;
       String tmp = " ";
       Double tmpWidth = 0;
       while ((tmpWidth + widthOfASpace) < startingPoint)
       {
          tmp += " ";
          tmpWidth += widthOfASpace;
        }
        this.Lbl_Titolo.Text = tmp + this.Lbl_Titolo.Text.Trim();
    }
    
    anzichè al centro si posiziona sulla destra.

    Gentilmente se potete suggerire fiducioso, saluto.
    Domenico.
    Ultima modifica di AntonioG; 16-10-2020 19:01  Motivo: Corretto titolo

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Probabilmente hai copiato/incollato un pezzo di codice passivamente senza ragionarci.

    Non l'ho mai fatto in .NET, ma in Delphi funziona questa formula (che riporto come pseudocodice):
        Label.Left = (Form.Width - Label.Width) / 2;
    
    In generale, a prescindere dal linguaggio e dall'applicazione, evito allineamenti forzati e piuttosto ricorro ad Anchor e Dock per adattare la disposizione dei controlli il più possibile al loro contenitore (impostando quindi l'allineamento sul testo e non sui controlli) e lasciando che si dispongano indipendentemente dalla dimensione del Form e dalla risoluzione.

    Ciao!
    ℹ️ Leggi di più su _alka_ ...

  3. #3
    Pacifico437 non è in linea Scolaretto
    Buonasera,

    ringrazio della disponibilità.
    Prima di effettuare la richiesta, ho provato sia su "Anchor che Dock".
    Ho pensato su codice che l'ho trovato in rete.
    Ho provato il tuo con esito negativo.

    Saluto.
    Domenico

  4. #4
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Pacifico437 Visualizza il messaggio
    Prima di effettuare la richiesta, ho provato sia su "Anchor che Dock".
    Ma non si sa come...

    Quote Originariamente inviato da Pacifico437 Visualizza il messaggio
    Ho provato il tuo con esito negativo.
    Ma non riporti il codice...
    ℹ️ Leggi di più su _alka_ ...

  5. #5
    Pacifico437 non è in linea Scolaretto
    Buonasera,

    mi scuso, riporto il tuo codice provando in tre soluzioni.
    Il Form l'ho chiamato "Frm_Comandi":

    // Lbl_Titolo.Left = (Lbl_Titolo.Width - Lbl_Titolo.Width) / 2;
    // Lbl_Titolo.Left = (Form.Width - Lbl_Titolo.Width) / 2;
    // Lbl_Titolo.Left = (Frm_Comandi.Width - Lbl_Titolo.Width) / 2;
    
    Ringrazio per la pazienza e scusami.
    Domenico.
    Ultima modifica di AntonioG; 16-10-2020 19:33  Motivo: Tag CODE

  6. #6
    Il codice va scritto nei vari eventi

            void lbCenter()
            {
                label1.Left = (this.Width - label1.Width) / 2;
            }
    
    
            private void Form1_ResizeEnd(object sender, EventArgs e)
            {
                lbCenter();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                lbCenter();
            }
    
            private void label1_Resize(object sender, EventArgs e)
            {
                lbCenter();
            }
    
    ℹ️ Leggi di più su AntonioG ...

  7. #7
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Pacifico437 Visualizza il messaggio
    mi scuso, riporto il tuo codice provando in tre soluzioni.
    Provare senza ragionare su quello che si scrive, traducendo alla lettera, è sempre una cosa che digerisco a fatica e fa davvero passare la voglia di rispondere...

    Veniamo ai tentativi...

    Lbl_Titolo.Left = (Lbl_Titolo.Width - Lbl_Titolo.Width) / 2;
    
    Che senso potrà mai avere questo? A parte il fatto che non rispecchia la mia soluzione, perché mai ti farei sottrarre un valore dallo stesso valore (la larghezza della label) ottenendo sempre zero, e poi dividendolo per due??

    In questo codice non appare nemmeno uno straccio di riferimento al Form, che nella mia formula c'era.

    Lbl_Titolo.Left = (Form.Width - Lbl_Titolo.Width) / 2;
    
    Già meglio, ma visto che il Form si chiama "Frm_Comandi", perché non hai scritto quello?

    Lbl_Titolo.Left = (Frm_Comandi.Width - Lbl_Titolo.Width) / 2;
    
    Questa è la versione giusta, ma mi insospettisce l'uso esplicito di Frm_Comandi, che dovrebbe essere il nome della classe (???).

    Poi, bisogna vedere il codice dove è stato scritto, perché non tutti i luoghi sono adatti; inoltre, come ti è stato segnalato, se ridimensioni la finestra devi probabilmente riposizionare la Label.

    Riepilogando, il mio era "pseudocodice" dichiarato per far capire qual è la formula corretta da usare, sostituendo ovviamente nei punti giusti i riferimenti ai valori che devi adoperare tu. Non è codice da prendere, copiare/incollare dove capita, modificare un po' per tentativi nella speranza vana che funzioni, facendo diventare una discussione per un problema tutto sommato banale (considerata la complessità media dei software che si debbono realizzare) lunga chilometri e chilometri di pagine.

    Ormai credo sia inutile quasi ripeterlo...
    ℹ️ Leggi di più su _alka_ ...

  8. #8
    Pacifico437 non è in linea Scolaretto
    Gent.mo AntonioG,

    chiedo scusa per il ritardo,
    funziona e ringrazio della gentilezza.
    Domenico.

  9. #9
    Ok Domenico ma vale quanto ti ha detto Alka e ti ho sempre detto io. Va bene che fai tutto per divertimento essendo in pensione, ma dovresti cogliere l'opportunità per ragionare sul codice se vuoi programmare.
    ℹ️ Leggi di più su AntonioG ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Posizionare un panel al centro della form
    Da rbarbato nel forum Visual Basic .Net
    Risposte: 19
    Ultimo Post: 06-09-2015, 13:41
  2. Risposte: 1
    Ultimo Post: 03-12-2012, 09:38
  3. [VB2010] MSGBOX posizionare nel form
    Da Pacifico437 nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 03-04-2012, 09:25
  4. [VB6] Posizionare form sul desktop
    Da dolcissimo nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 16-10-2008, 12:49
  5. Posizionare al centro un form
    Da ceklo nel forum Visual Basic 6
    Risposte: 12
    Ultimo Post: 13-08-2007, 22:38