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

Discussione: Visual Studio 2019 C# Posizionare al centro del Form una Label

  1. #1
    Pacifico437 non è in linea Scolaretto
    Post
    58

    Visual Studio 2019 C# Posizionare al centro del Form una Label

    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:
    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 18:01  Motivo: Corretto titolo

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,303
    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):
    codice:
        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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  3. #3
    Pacifico437 non è in linea Scolaretto
    Post
    58
    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
    Luogo
    Reggio Emilia
    Post
    1,303
    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...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

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

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

    codice:
    // 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 18:33  Motivo: Tag CODE

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,904
    Blogs
    5
    Il codice va scritto nei vari eventi

    codice:
            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();
            }
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,303
    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...

    codice:
    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.

    codice:
    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?

    codice:
    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...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

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

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

  9. #9
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,904
    Blogs
    5
    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.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi