135 messaggi dal 01 novembre 2012
Buongiorno,

con il seguente codice visualizzo in anteprima di stampa i valori
che sono memorizzate nelle TextBox. L'allineamento avviene da sinistra verso destra.
Gradirei se è possibile avere l'allineamento da destra verso sinistra.
private void Prt_Document_PrintPage(object sender, PrintPageEventArgs e)

e.Graphics.DrawString(DateTime.Today.ToLongDateString(), dataFont, Brushes.Black, x: 190, y: 20);

e.Graphics.DrawString(TextBox1.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: 550, y: 180);  

e.Graphics.DrawString(TextBox2.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: 550, y: 230);  

e.Graphics.DrawString(TextBox3.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: 550, y: 280);  

e.Graphics.DrawString(TextBox4.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: 550, y: 330);  

e.Graphics.DrawString(TextBox5.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: 550, y: 380);  

e.Graphics.DrawString(TextBox6.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: 550, y: 430); 



Anticipatamente ringrazio, fiducioso di un gradito aiuto, saluto.

Domenico
59 messaggi dal 17 maggio 2010
Ciao,
devi misurare la stringa e spostare il valore di "X" di conseguenza.

var pointX = 550;
var size =  e.Graphics.MeasureString(TextBox1.Text, new Font("Arial", 20, FontStyle.Italic), pointX,null)
var x =pointX-size.Width; // allineato a destra rispetto a pointX
x =pointX; // allineato a sinistra rispetto a pointX (non fai nulla in pratica)
x =pointX-(size.Width/2).; // allineato al centro rispetto a pointX

e.Graphics.DrawString(TextBox1.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: x, y: 180);

Ovviamente parliamo sempre rispetto al punto che fornisci tu, quindi nel tuo caso è 550 per tutte le righe tranne la prima. Chiaramente per la prima riga il procedimento è uguale, ma il punto di partenza va ricalcolato con quei valori (var pointX=190).

0|----------------------------------------------------------550---------------------------------------------------------|1100
0|---------------------------------------------------aaaaaaaaaa---------------------------------------------------|1100 //allineamento al centro rispetto a 550
0|-----------------------------------------aaaaaaaaaa-------------------------------------------------------------|1100 //allineamento a destra finendo a 550
0|------------------------------------------------------------aaaaaaaaaa------------------------------------------|1100 //allineamento a sinistra a partire da 550

Chiaramente se il tuo intento è allineare a destra o sinistra o centro in base alla grandezza del rettangolo devi usare la misura della larghezza del rettangolo, quindi pointX diventa 0 se devi allineare a sinistra, uguale alla larghezza del rettangolo (totalità di pictureBox o immagine) meno la larghezza della stringa se devi allineare a destra, e ovviamente se devi centrare diventa larghezza del rettangolo / 2 meno la metà della larghezza della stringa.
In questo caso il codice diventa :

var pointX = this.pictureBox.Width.;//1100
var size =  e.Graphics.MeasureString(TextBox1.Text, new Font("Arial", 20, FontStyle.Italic), pointX,null)
var x =pointX-size.Width; // allineato a destra rispetto al rettangolo (pictureBox in questo esempio)
x =0; // allineato a sinistra rispetto al rettangolo (pictureBox in questo esempio)
x =(pointX/2)-(size.Width/2).; // allineato al centro rispetto  al rettangolo (pictureBox in questo esempio)

e.Graphics.DrawString(TextBox1.Text, new Font("Arial", 20, FontStyle.Italic), Brushes.Black, x: x, y: 180);

In questo caso l'allineamento sarà questo:

0|----------------------------------------------------------550---------------------------------------------------------|1100
0|---------------------------------------------------aaaaaaaaaa---------------------------------------------------|1100 //allineamento al centro
0|------------------------------------------------------------------------------------------------------aaaaaaaaaa|1100 //allineamento a destra
0|aaaaaaaaaa------------------------------------------------------------------------------------------------------|1100 //allineamento a sinistra
Modificato da u235 il 25 agosto 2022 20:17 -
135 messaggi dal 01 novembre 2012
Gent.mo U235,

ringrazio della gentilezza e disponibilità.

L'allineamento è perfetto e potrebbe andare. Gradirei invece se è
possibile che partisse da destra verso sinistra come
l'esempio che riporto:
1.236.63,
---- 58.12,
---957.25,

Auguro che si possa realizzare, fiducioso, saluto.
Domenico.
Modificato da Pacifico437 il 25 agosto 2022 23:35 -
59 messaggi dal 17 maggio 2010
Rileggi il post precedente, hai già la risposta.
Devi sottrarre la larghezza della stringa (la misuri con MeasureString) al parametro (x) che intendevi passare a DrawString.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.