Visual Basic.NET - Alinear 3 columnas en Richtextbox para ticket

 
Vista:
sin imagen de perfil

Alinear 3 columnas en Richtextbox para ticket

Publicado por Guillermo (42 intervenciones) el 26/03/2015 14:56:12
Hola!
Estoy realizando una aplicacion para restaurante, y para hacer la previsualizacion del ticket en pantalla, y el histórico de tickets, estoy utilizando un Richtextbox.
El problema es el siguiente: En el ticket ya he puesto la imagen de cabecera, la fecha y los datos del cliente arriba, pero el problema es cuando voy a introducir los datos del ticket desde la base de datos en 3 columnas diferentes (cantidad, textolinea y importe), ya que no se como hacer que me aparezcan en el richtextbox alineados.
Algo así:
-----------------------------------------------------------
Cant Concepto Importe
-----------------------------------------------------------
1 Pizza 4 estaciones 9,50e
10 Alitas de pollo 10,00e
2 Botes cocacola 33cl 3,00e

Ahora mismo imprimo las lineas sobre el richtextbox pero claro, como en el concepto cada linea tiene una cantidad de texto diferente, el importe sale desajustado.
Existe alguna manera de indicarle en la linea actual el caracter en el que quiero que se escriba el texto? o algo similar.
A ver si por favor me podeis echar una mano.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Alinear 3 columnas en Richtextbox para ticket

Publicado por omar (155 intervenciones) el 26/03/2015 15:31:06
utiliza vbtab para separar datos
o crls
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Alinear 3 columnas en Richtextbox para ticket

Publicado por Guillermo (42 intervenciones) el 26/03/2015 19:00:50
Hola Omar,
Gracias por responder. He probado a usar vbtab, pero resulta que para separar la cantidad del concepto funciona, pero despues el concepto del importe los deja cada uno diferentes. ES decir, así:
-----------------------------------------------------------
Cant Concepto Importe
-----------------------------------------------------------
1 Piz. 4 estaciones 9,50e
10 Alitas de pollo 10,00e
2 Botes cocacola 33cl
3,00e

Estoy intentandolo con PadRight y PadLeft, pero me encuentro que como cada fuente de texto es un mundo, los espacios en blanco no se ajustan y no se alinean tampoco los importes.
Voy a seguir mirando, a ver si alguien me puede ayudar con lo de las fuentes por favor.
Para que os hagais una idea, este es el codigo que estoy utilizando ahora mismo:
1
2
3
4
5
6
7
8
'Almaceno en 3 variables las 3 columnas a mostrar
Dim col1 = Trim(CStr(DirectCast(myRow("cantidad"), Integer)))
Dim col2 = Trim(DirectCast(myRow("linea"), String))
Dim col3 = Trim(CStr(DirectCast(myRow("importe"), Decimal)) + "e")
'Subimos al portapapeles el texto a presentar
Clipboard.SetText(Chr(13) + col1.PadRight(3) + col2.PadRight(29) + vbTab + col3)
ticket1.Paste() 'Pegamos en el Richtextbox el contenido del portapapeles
Clipboard.Clear() 'limpiamos el portapapeles
NOTA: Para el que lo vaya a gastar que tenga en cuenta que en col1, col2 y col3 es donde tendrá que almacenar el texto a mostrar claro. YO es que al extraer los datos de una tabla de datos en memoria lo hago con el directcast.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Alinear 3 columnas en Richtextbox para ticket

Publicado por Guillermo (42 intervenciones) el 26/03/2015 21:13:12
Bueno, finalmente lo he solucionado. Buscando buscando, he averiguado que no todas las fuentes de texto tratan a los espacios como un caracter, sino que muchas le asignan menos 'espacio' al escribir un espacio, que un caracter. Las fuentes que SÍ que lo hacen, se llaman fuentes MONOSPACE, y me he descargado unas cuantas de internet.

Las fuentes que sí que valen son:
De Windows: Courier new, Vrinda y Lucida Console. (éstas, que haya probado yo).
Descargadas de internet: Ubuntu Mono, Meslo LG M DZ, Droid Sans Mono, Inconsolata.

Esto aunque parezca una chorrada no lo es, porque te puedes volver tarumba intentando averiguar lo que pasa.
Yo finalmente he usado la Ubuntu Mono, con un tamaño de 8 y un tipo 'regular' para la CANTIDAD y el CONCEPTO, que me da 2+1 caracteres para CANTIDAD y 24+1 caracteres para el CONCEPTO
Y para el IMPORTE, que no importa tanto, he usado la Meslo LG M DZ, un tamaño 7 y un tipo 'regular', que me da para 4 caracteres en total (ej. 33,4e)

Mi código queda así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                'Almaceno en 3 variables las 3 columnas a mostrar
                Dim col1 = Trim(CStr(DirectCast(myRow("cantidad"), Integer)))
                Dim col2 = Trim(DirectCast(myRow("linea"), String))
                Dim col3 = Trim(CStr(DirectCast(myRow("importe"), Decimal)))
                'Aqui quito el ultimo digito al importe para que ocupe menos
                col3 = Trim(Mid(col3, 1, Len(col3) - 1)) + "e"
                'Subimos al portapapeles el texto a presentar
                Clipboard.SetText(Chr(13) + col1.PadRight(3) + col2.PadRight(25))
                'Las fuentes: Courier new,Vrinda,Lucida Console valen. Las otras no.
                'Yo he instalado: Ubuntu Mono, Meslo LG M DZ, Droid Sans Mono, Inconsolata
                'Droid Sans Mono al nº7 con 3,25 y4 de pad vale.
                ticket1.SelectionFont = New Font("Ubuntu Mono", 8, FontStyle.Regular)
                ticket1.Paste() 'Pegamos en el Richtextbox el contenido del portapapeles
                Clipboard.SetText(col3.PadLeft(5))
                ticket1.SelectionFont = New Font("Meslo LG M DZ", 7, FontStyle.Regular)
                ticket1.Paste()
                Clipboard.Clear() 'limpiamos el portapapeles

Y el resultado en pantalla este. Despues ya lo pulire mejor, pero a groso modo es asi:

ticket
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 45
Ha disminuido su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Alinear 3 columnas en Richtextbox para ticket

Publicado por xve (100 intervenciones) el 27/03/2015 10:30:13
Gracias por compartirlo Guillermo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar