none
VB2010 - Problema con String.Format RRS feed

  • Pregunta

  • Estimados

    estoy creando un reporte para una impresora térmica, en donde debo listar tres columnas usando String.Format pero no logro cuadrar el texto.

    Actualmente imprime así:
    CANT       DETALLE          UNITARIO
     1,00 Texto de prueba          4.990
     2,00 Texto uno      5.000

    Pero la idea que salga algo como esto:
    CANT       DETALLE          UNITARIO
     1,00 Texto de prueba          4.990
     2,00 Texto uno                    5.000

    _Detalle = _Detalle.Substring(0, If(_Detalle.Length >= 40, 40, _Detalle.Length))

    e.Graphics.DrawString(String.Format("{0,8} {1,-40} {2,8}", _Cant, _Detalle, _Unit.Replace(",", ".")), Font8Nor, Brushes.Black, 1, NLinea)

    domingo, 9 de septiembre de 2012 3:15

Respuestas

  • Hola marco. Yo ya he hecho eso que quieres hacer. Para lograrlo, he separado el texto, metiendo cada fragmento de texto en una variable distinta, y luego calculando la posicion donde se debe escribir. Por ejemplo:

    Dim cant as string = 1.00 'supongamos que la cantidad va escrita en la posicion x=1 dim detalle as string = "Texto de prueba" 'supongamos que el detalle va escrita en la posicion x=50

    dim unitario as string = 100.00 'supongamos que la cantidad va escrita en la posicion x=200

    'luego mandas aescribir:

    e.Graphics.DrawString(cant, Font8Nor, Brushes.Black, 1, NLinea)

    e.Graphics.DrawString(detalle, Font8Nor, Brushes.Black, 50, NLinea)

    e.Graphics.DrawString(unitario, Font8Nor, Brushes.Black, 200, NLinea)


    De esa forma te podrá quedar mejor alineado. Solo debes hacer un par de pruebas hasta obtener las coordenadas del eje X que seadapten mejor al resultado que quieres obtener.


    Luis Bermúdez Desarrollador de Aplicaciones Independiente Costa Rica

    • Marcado como respuesta Marco Elgueta domingo, 9 de septiembre de 2012 4:33
    domingo, 9 de septiembre de 2012 3:59
  • hola

    .NET Format a string with fixed spaces

    esta correcto que uses el String.Format() para alinear, pero ten en cuenta que esta tecnica funciona solo si usas una fuente de texto que respete el espaciado, creo que fuentes como ser courier new

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Marco Elgueta domingo, 9 de septiembre de 2012 5:08
    domingo, 9 de septiembre de 2012 4:03

Todas las respuestas

  • Hola marco. Yo ya he hecho eso que quieres hacer. Para lograrlo, he separado el texto, metiendo cada fragmento de texto en una variable distinta, y luego calculando la posicion donde se debe escribir. Por ejemplo:

    Dim cant as string = 1.00 'supongamos que la cantidad va escrita en la posicion x=1 dim detalle as string = "Texto de prueba" 'supongamos que el detalle va escrita en la posicion x=50

    dim unitario as string = 100.00 'supongamos que la cantidad va escrita en la posicion x=200

    'luego mandas aescribir:

    e.Graphics.DrawString(cant, Font8Nor, Brushes.Black, 1, NLinea)

    e.Graphics.DrawString(detalle, Font8Nor, Brushes.Black, 50, NLinea)

    e.Graphics.DrawString(unitario, Font8Nor, Brushes.Black, 200, NLinea)


    De esa forma te podrá quedar mejor alineado. Solo debes hacer un par de pruebas hasta obtener las coordenadas del eje X que seadapten mejor al resultado que quieres obtener.


    Luis Bermúdez Desarrollador de Aplicaciones Independiente Costa Rica

    • Marcado como respuesta Marco Elgueta domingo, 9 de septiembre de 2012 4:33
    domingo, 9 de septiembre de 2012 3:59
  • hola

    .NET Format a string with fixed spaces

    esta correcto que uses el String.Format() para alinear, pero ten en cuenta que esta tecnica funciona solo si usas una fuente de texto que respete el espaciado, creo que fuentes como ser courier new

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Marco Elgueta domingo, 9 de septiembre de 2012 5:08
    domingo, 9 de septiembre de 2012 4:03