Alinear textos derecha e izquierda

Iniciado por rigorvzla, 9 Agosto 2021, 16:21 PM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

Hola amigos, estoy aqui con un problema que no se como resolver, espero alguien pueda ayudarme.

Quiero en un cuadro de texto enviar  textos, la cosa es:
1-No se si estoy usando el control correcto para esto (TextBox) actualmente
2-quiero escribir y que el texto enviado se alinie a la izquierda
3-quiero que cuando envie texto de otro metodo se alinie en el mismo cuadro pero a la derecha

como puedo lograr esto? se que unir el texto al mismo control se hace con Append, mas no se como alinear una los mensajes que envio a mi conveniencia.

Espero puedan darme ayuda , gracias de antemano

Serapis

#1
El textbox tiene su propiedad alineacion...
Ahora bien, me parece que tu quieres mantener una alineación 'múltiple' al mismo tiempo, tal cual aparece en los chats...

No has aclarado como debe aparecer verticalmente, es decir si el 'append' se realiza debajo de lo previo (quedando último mensaje abajo) o encima d elo previo (quedando lo último arriba dle todo).
Normalmente queda abajo, pero requiere scroll por parte del usuario. El caso es que esto debe queda claro antes de nada para desarrollar un sistema y no el otro.

Esto se puede hacer de varias maneras:
- Mantener 2 controles, uno alineado a la derecha y otro a la izquierda, ambos deberían mantener un aspecto transparente de modo que uno no tape al otro, si no que los textos se solapen como si estuvieran en la misma área. La complicación aquí es mantener la verticalidad , un mensaje debado de otro. Esto se logra fácil y chapuceramente manteniendo sendos controles otro oculto, donde se pega primero y se contabilida las líneas que ocupa, luego al texto a pegas hay que endosarle dichos saltos de línea (tantos como líneas).

- Mantener 1 solo control. Eliges una alineación (por ejemplo izquierda), cuando pegas el texto a izquierda no tienes nada más que hacer, pero cuando pegas el texto alineado a la derecha, debes calcular el espacio a añadir a la izquierda. Como consejo, se puede simplificar los cálculos si eliges una fuente monoespaciada (todos los caracteres tienen le mismo ancho), luego sabiendo el ancho del textbox, sabes cuantos caracteres caben en una línea. A la noche si estás interesado y saco un tiempito te pongo un sencillo pseudocódigo para esto...

- Mantener 2 controles ocultos cada uno con su alineación. El textbox donde se ve la imagen en realidad sería ahora un control de imagen. Tú pegas el texto en cada control oculto (que además tienen el mismo ancho que el control de imagen), y luego recortas (copias) el gráfico generado en el textbox de turno, y lo pegas en el control de imagen. Si tiene un fondo este control el pegado debe ser con transparencias y para ello el fondo de los textbox deben ser del color a enmascarar en el control de imagen.

En cualquier caso, date cuenta que si el control donde se expone al usuario es modificable (el menos en ancho), cada vez que se modifique dicho ancho requiere volver a renderizar todo su contenido, por lo que para que sea efectivo, todo el texto debe irse guardando en un fichero, diferenciando lo que se alinea a un lado de lo que se alinea al otro...

Ejemplo
Como se guarda en el fichero:
Pedro:
Hola Juan, que harás esta noche?. Podríamos ir al cine...
Juan:
Hola Pedro, tengo toda la noche ocupada

Como se ve en la interfaz:

--------------------------------------------
Pedro:
Hola Juan, que harás esta noche?. Podríamos 
ir al cine...
                                      Juan:
                Hola Pedro, tengo toda la no
                                che ocupada
--------------------------------------------


'Pedro:' y 'Juan:' (+ solo el salto de línea), hacen en el ejemplo el identificador de alineación en el fichero...

rigorvzla

#2
en efecto es justo lo q quiero hacer, lo intente con dos controles como mencionas, solo que lo vi muy poco practico , ya que al llegar al limite del textbox salen ambos scroll bar y daña todo la estetica, mas el ejemplo ultimo que me dejastes esta justo y suficiente para mi.

y algo extra seria , poner dos colores de fuentes distintas, ya que son dos y no mas "personas", me gustaria que se identificara, pero al intentarlo entonces solo queda de uno u otro color pero no por lineas

ThunderCls

Cita de: rigorvzla en  9 Agosto 2021, 16:21 PM
1-No se si estoy usando el control correcto para esto (TextBox) actualmente

No vas a poder lograr mucho con un TextBox "standard". Para esto necesitas un RichTextbox y el atributo SelectionAlignment, a traves del cual puedes especificar el tipo de alineacion horizontal que deseas hacer en una selection



Con 1 RichTextbox y 2 Textbox (imitando inputs por separado) en el Form:

Código (csharp) [Seleccionar]
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Return)
    {
        richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
        richTextBox1.SelectionBackColor = Color.DarkCyan;
        richTextBox1.SelectedText = textBox1.Text + Environment.NewLine;

        textBox1.Clear();
        e.Handled = true;
    }
}

private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Return)
    {
        richTextBox1.SelectionAlignment = HorizontalAlignment.Right;
        richTextBox1.SelectionBackColor = Color.DarkGray;
        richTextBox1.SelectedText = textBox2.Text + Environment.NewLine;

        textBox2.Clear();
        e.Handled = true;
    }
}


Saludos
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/