none
Código ANSI en vb.net RRS feed

  • Pregunta

  • Hola a todos:

    He de mostrar unas labels que han de llevar exponente y subíndice, es para una tema de formulación. Los exponentes más o menos los soluciono con código ANSI, por ejemplo; Label1.text= "15" & chr(178) lo que quedaría la potencia del 15 elevado a "2".

    Ahora bien, el problema lo tengo en la fórmula que lleva un subíndice, por ejemplo una C y una n pequeñita, que por ejemplo en este caso sería el capital final, pongamos.

    El código ANSI no me permite escribir subíndices o yo no lo he sabido ver, entonces cual sería el código de caracteres a utilizar en este caso.

    Muchas gracias a todos.

    Gemma

    viernes, 15 de marzo de 2019 16:06

Respuestas

  • Con códigos ANSI no puedes. Pero afortunadamente los strings de VB.NET no son ANSI sino que son Unicode. El carácter Unicode para el subíndice "n" es U+2099. En VB sería CHR(&H2099). Tienes la lista completa en este artículo:

    https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts

    Pero ojo, no todos los "Fonts" contienen todos los caracteres. Por ejemplo, en mi Windows 10 en el font Arial existe el U+207F que es el superíndice n, pero no existe el U+2099 que es el subíndice n. En cambio sí que está el U+2090 que es el subíndice a.

    Así que tienes que tener cuidado de ponerle a t Label un font que contenga los caracteres que quieres mostrar. Puedes examinarlos desde la aplicación "charmap" que viene con Windows.

    Si esto no te resuelve el problema suficientemente bien, la alternativa es prescindir del Label y en su lugar usar System.Drawing para dibujar el texto usando el comando DrawString. esto tiene la ventaja de que puedes ejecutar varios DrawString cambiando el tamaño del font y las coordenadas donde escribes, lo que te permite generar toda clase de subíndices y superíndices. Pero claro, lo hace a costa de escribir mucho más código y de implementar a mano toda la lógica para el cálculo de las coordenadas para que te quede cada coosa en su sitio.

    Otra alternativa: Usa un RichTextbox para mostrar la fórmula. Se carga con un RTF y el RTF permite subíndices y superíndices. Puedes pintar la fórmula primero en Word, luego le dices que la salve como RTF, y luego cargas ese RTF en el RichTextbox.

    • Propuesto como respuesta Carlos_Ruiz_M viernes, 15 de marzo de 2019 18:00
    • Marcado como respuesta gemma_campillo viernes, 15 de marzo de 2019 18:04
    viernes, 15 de marzo de 2019 17:17

Todas las respuestas

  • Con códigos ANSI no puedes. Pero afortunadamente los strings de VB.NET no son ANSI sino que son Unicode. El carácter Unicode para el subíndice "n" es U+2099. En VB sería CHR(&H2099). Tienes la lista completa en este artículo:

    https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts

    Pero ojo, no todos los "Fonts" contienen todos los caracteres. Por ejemplo, en mi Windows 10 en el font Arial existe el U+207F que es el superíndice n, pero no existe el U+2099 que es el subíndice n. En cambio sí que está el U+2090 que es el subíndice a.

    Así que tienes que tener cuidado de ponerle a t Label un font que contenga los caracteres que quieres mostrar. Puedes examinarlos desde la aplicación "charmap" que viene con Windows.

    Si esto no te resuelve el problema suficientemente bien, la alternativa es prescindir del Label y en su lugar usar System.Drawing para dibujar el texto usando el comando DrawString. esto tiene la ventaja de que puedes ejecutar varios DrawString cambiando el tamaño del font y las coordenadas donde escribes, lo que te permite generar toda clase de subíndices y superíndices. Pero claro, lo hace a costa de escribir mucho más código y de implementar a mano toda la lógica para el cálculo de las coordenadas para que te quede cada coosa en su sitio.

    Otra alternativa: Usa un RichTextbox para mostrar la fórmula. Se carga con un RTF y el RTF permite subíndices y superíndices. Puedes pintar la fórmula primero en Word, luego le dices que la salve como RTF, y luego cargas ese RTF en el RichTextbox.

    • Propuesto como respuesta Carlos_Ruiz_M viernes, 15 de marzo de 2019 18:00
    • Marcado como respuesta gemma_campillo viernes, 15 de marzo de 2019 18:04
    viernes, 15 de marzo de 2019 17:17
  • Hola querido Albeto.

    Muchas gracias, no sabía como arreglar el tema ese.

    Un fuerte abrazo como siempre.

    Gemma

    viernes, 15 de marzo de 2019 18:03