none
Separar string en palabras y estas en caracteres. RRS feed

  • Pregunta

  • Hola.

    Gracias por la ayuda que ofrecen.

            Dim lbtx = ""
            Dim i = 0
    
            For Each element In TextBox1.Text.Split(" ")
                lbtx = String.Format(element.ToArray)
    
                Dim flpnl As New FlowLayoutPanel()
    
                Dim labl As New Label()
                labl.Text = lbtx
                labl.AutoSize = True
                labl.BackColor = Color.White
                labl.Size = New Size(25, 25)
                labl.BorderStyle = BorderStyle.FixedSingle
                labl.Margin = New Padding(1, 1, 1, 1)
                labl.TextAlign = ContentAlignment.MiddleCenter
                labl.Font = New Font("Arial", 13, FontStyle.Regular, GraphicsUnit.Point, 0)
    
                flpnl.Controls.Add(labl)
                flpnl.Margin = New Padding(1, 1, 1, 1)
                flpnl.Width = flpnl.PreferredSize.Width
                flpnl.Height = flpnl.PreferredSize.Height
    
                FlowLayoutPanel1.Controls.Add(flpnl)
                i = i + 1
            Next
    

    Resultado:

            Dim chars As Char() = TextBox1.Text.ToCharArray()
            For Each element In chars
                lbtx = element.ToString
    
                Dim lbel As New Label
                lbel.BackColor = Color.White
                lbel.AutoSize = False
                lbel.Size = New Size(25, 25)
                lbel.BorderStyle = BorderStyle.FixedSingle
                lbel.Margin = New Padding(1, 1, 1, 1)
                lbel.TextAlign = ContentAlignment.MiddleCenter
                lbel.Font = New Font("Arial", 13, FontStyle.Regular, GraphicsUnit.Point, 0)
                lbel.Text = lbtx
    
                If lbel.Text = " " Or lbel.Text = "." Or lbel.Text = "," Or lbel.Text = ";" Or lbel.Text = ":" Or lbel.Text = "¿" Or lbel.Text = "?" Or lbel.Text = "¡" Or lbel.Text = "!" Then
                    lbel.BackColor = Color.Ivory
                    lbel.BorderStyle = BorderStyle.None
                End If
    
                FlowLayoutPanel1.Controls.Add(lbel)
                i = i + 1
            Next
    

    Resultado:

    Necesito esto último, pero sin que las palabras se corten al final de cada línea. Agradecería que la ayuda que ofrezcan fuese lo mas fácil de entender posible.

    Muchas gracias.


    Rafael FM

    sábado, 25 de noviembre de 2017 16:22

Respuestas

  • Te propongo construir una nueva cadena con palabras, por línea, ajustadas según el ancho del control 'FlowLayoutPanel1'. La nueva cadena de caracteres será la que pintaras en el control tal como lo vienes haciendo, por ejemplo:

    Dim Cells = CInt(Math.Floor(FlowLayoutPanel1.Width / 27)) '27 = 25 + 1 + 1
    Dim Temp = TextBox1.Text
    Dim Text = String.Empty
    Dim Index = 0
    Dim Position = 0
    Do
    	Position = If(Temp.Length - Index - 1 < Cells,
    		Temp.Length - Index, Temp.Substring(Index, Cells + 1).LastIndexOf(" "))
    
    	Text += Temp.Substring(Index, Position).PadRight(Cells)
    
    	Index += Position + 1
    Loop Until (Index = Temp.Length + 1)
    
    Dim chars As Char() = Text.Trim().ToCharArray() 'Convertir la nueva cadena a un array de caracteres
    
    For Each element In chars
    	'Your code...
    Next

    • Marcado como respuesta RafaelFM sábado, 25 de noviembre de 2017 20:20
    sábado, 25 de noviembre de 2017 19:15

Todas las respuestas

  • Te propongo construir una nueva cadena con palabras, por línea, ajustadas según el ancho del control 'FlowLayoutPanel1'. La nueva cadena de caracteres será la que pintaras en el control tal como lo vienes haciendo, por ejemplo:

    Dim Cells = CInt(Math.Floor(FlowLayoutPanel1.Width / 27)) '27 = 25 + 1 + 1
    Dim Temp = TextBox1.Text
    Dim Text = String.Empty
    Dim Index = 0
    Dim Position = 0
    Do
    	Position = If(Temp.Length - Index - 1 < Cells,
    		Temp.Length - Index, Temp.Substring(Index, Cells + 1).LastIndexOf(" "))
    
    	Text += Temp.Substring(Index, Position).PadRight(Cells)
    
    	Index += Position + 1
    Loop Until (Index = Temp.Length + 1)
    
    Dim chars As Char() = Text.Trim().ToCharArray() 'Convertir la nueva cadena a un array de caracteres
    
    For Each element In chars
    	'Your code...
    Next

    • Marcado como respuesta RafaelFM sábado, 25 de noviembre de 2017 20:20
    sábado, 25 de noviembre de 2017 19:15
  • Gracias Willams Morales.


    Rafael FM

    sábado, 25 de noviembre de 2017 20:20