Visual Studio. Titolo del Form al centro

di il
7 risposte

Visual Studio. Titolo del Form al centro

Gent.mi,

gradirei conoscere il procedimento per ottenere il testo della barra del Form al Centro.
Con la proprietà del Form (RighToLeft) posso avere il testo a Destra o a Sinistra.
Ho usato il seguente codice con esito negativo.
this.Text = "TITOLO DELLA BARRA AL CENTRO DEL FORM";
            
            Graphics g = this.CreateGraphics();
                Double startingPoint = (this.Width / 2) - (g.MeasureString(this.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.Text = tmp + this.Text.Trim();
Ringrazio anticipatamente e fiducioso del risultato, saluto.
Domenico.

7 Risposte

  • Re: Visual Studio. Titolo del Form al centro

    Hai scritto il codice nell'evento Resize del Form?
  • Re: Visual Studio. Titolo del Form al centro

    Gent.mo Oregon,

    ringrazio della tempestività e disponibilità.

    Il codice l'avevo inserito in Form_Resize senza ottenere un risultato.

    Il risultato l'ho tenuto in parte (la scritta si è spostata di poco da sinistra verso destra e non al centro) al Form_Load.
    Domenico.
  • Re: Visual Studio. Titolo del Form al centro

    Pacifico437 ha scritto:


    Con la proprietà del Form (RighToLeft) posso avere il testo a Destra o a Sinistra.
    Hai letto la documentazione di RightToLeft? Non si tratta di un banale allineamento grafico del testo, ma riguarda la direzione di lettura, da destra verso sinistra, per il supporto all'internazionalizzazione e in particolar modo alle lingue che si leggono in quel senso, quindi non va assolutamente utilizzata per questo scopo.

    Pacifico437 ha scritto:


    Double widthOfASpace = g.MeasureString(" ", this.Font).Width;
    Se usi la proprietà Font, ti stai riferendo al carattere usato per il testo che è contenuto all'interno della finestra, ossia il font predefinito per i controlli che vengono posizionati nella maschera stessa, mentre il font della barra del titolo viene determinata nelle impostazioni di sistema di Windows, e potrebbe essere completamente diverso (e in pratica lo è sempre).

    Devi andare a recuperare quindi il Font impostato per la Caption delle finestre dal sistema, tramite SystemFonts.CaptionFont.

    Ciao!
  • Re: Visual Studio. Titolo del Form al centro

    Pacifico ... se lo metti nel Load te lo fa solo la prima volta. Va richiamata ANCHE nel Resize, tenuto conto di quanto ti ha detto Alka sul Font.
  • Re: Visual Studio. Titolo del Form al centro

    Gent.mo Oregon,

    il codice è inserito sia al Form_Load che al Form_Resize.
    Ho provato a modificare il Size del Form ed ho inserito:
    public static System.Drawing.Font CaptionFont { get; }.
    Ho modificato la proprietà del form "RightToLeft su Yes", il testo si è spostato verso destra non al centro ma potrebbe andare.

    Ringrazio per il gradito aiuto e saluto.
    Domenico.
  • Re: Visual Studio. Titolo del Form al centro

    Pacifico437 ha scritto:


    Ho provato a modificare il Size del Form ed ho inserito:
    public static System.Drawing.Font CaptionFont { get; }.
    Non è una proprietà che devi inserire tu: esiste già, va solamente letta (ti ho linkato la documentazione da leggere nella precedente risposta!) perché contiene l'oggetto con le caratteristiche del Font di sistema, che viene inizializzato dal framework appositamente a questo scopo.

    Pacifico437 ha scritto:


    Ho modificato la proprietà del form "RightToLeft su Yes"
    Quindi non hai letto minimamente quello che ti ho scritto.
    Che senso ha chiedere suggerimenti e poi non seguirli?
    Cioè, che tu possa alla fine fare come credi è normale, ma allora prosegui per la tua strada e non porre le domande se poi scarti i suggerimenti che ti vengono dati.

    Pacifico437 ha scritto:


    il testo si è spostato verso destra non al centro ma potrebbe andare.
    Cioè, tu hai dichiarato una proprietà che non serviva, poi ne hai usata un'altra impropriamente, e alla fine hai ottenuto un testo che va sulla destra, mentre tu lo volevi al centro, e concludi con "potrebbe andare".

    Vabbè, direi che in futuro eviterò di perdere il mio tempo sulle tue problematiche, tanto a che serve? e a chi?

    Buon lavoro!
  • Re: Visual Studio. Titolo del Form al centro

    A mio avviso il codice che hai postato in linea di massima funziona, gli errori che hai fatto sono quando hai messo this.Text con il nome della finestra insieme al codice che fa il calcolo e per la misura hai usato il font sbagliato...
    Poi ho il sospetto che non hai attivato l'evento resize.
    Così corretto non è ancora perfetto, perché la centratura cambia leggermente se il programma gira in win10 o win7, ma direi che funziona.
    
           public Form1()
            {
                InitializeComponent();
                // l'evento Resize se non lo hai attivato da progettazione
                // si può attivare qui, altrimenti cancella la riga seguente
                this.Resize += new System.EventHandler(this.Form1_Resize); 
                // il titolo una volta per tutte
                this.Text = "TITOLO DELLA BARRA AL CENTRO DEL FORM";
                // il primo resize all'avvio
                Form1_Resize(this, new EventArgs());
            }
    
            private void Form1_Resize(object sender, EventArgs e)
            {
                Graphics g = CreateGraphics();
                float lForm = (Width - 130)/2; // larghezza del form meno max min close /2, 130 aggiustamento ottico
                float lTesto = g.MeasureString(Text.Trim(), SystemFonts.CaptionFont).Width /2; // larghezza del testo /2
                float formmenotesto = lForm - lTesto;
                if (formmenotesto < 0) formmenotesto = 0; // si è arrivati al bordo
                string spazi = " "; // tanti spazi quanti servono
                spazi = spazi.PadRight(Convert.ToInt16(formmenotesto) / 3);
                Text = spazi + Text.Trim();
            }
    
    PS. Il titolo non può essere scritto oltre un certo punto, estendendo il form su due monitor, il titolo può risultare tagliato.
Devi accedere o registrarti per scrivere nel forum
7 risposte