2011-10-13 15 views
41

¿Es posible resaltar/seleccionar parte del texto en un control de etiqueta de Windows Form? Sé que es posible con el control RTFtextbox pero que usar ese control sería excesivo ya que necesito crear muchas instancias de la etiqueta.¿Es posible seleccionar texto en una etiqueta de formulario de Windows?

+1

¿Qué quiere decir por "seleccionar"? ¿Quiere decir seleccionarlo por código para usar este texto después? – GianT971

+1

sorry @ John ... al seleccionar Me refiero a la selección de texto, p. en RichTextBox puede usar las propiedades "SelectedText", etc. para seleccionar/resaltar una parte del texto completo. El efecto es similar a seleccionar/resaltar texto manualmente con el mouse. – tunafish24

+2

Solo una idea: puede crear una clase derivada de Etiqueta en la que tenga alguna propiedad para almacenar el índice inicial y final del texto que se va a seleccionar, luego anulando el evento OnPaint puede resaltar texto dibujando un rectángulo semitransparente sobre él – Marco

Respuesta

67

¿Es posible seleccionar texto en una etiqueta de formulario de Windows? - NO (al menos no es una forma fácil sin anular el método Label.Paint)

Puede cambiar fácilmente un cuadro de texto para este fin.

TextBox1.Text = "Hello, Select Me"; 
TextBox1.ReadOnly = true; 
TextBox1.BorderStyle = 0; 
TextBox1.BackColor = this.BackColor; 
TextBox1.TabStop = false; 

Do not believe? aquí hay un ejemplo para ti.

enter image description here

+7

El problema con el que se puede encontrar es que si configura el texto de la caja de texto de forma dinámica, ocultará el texto si es más ancho que el cuadro de texto, a diferencia de la etiqueta. –

+2

@TheMuffinMan tiene que establecer la propiedad «WordWrap» en «verdadero». –

+1

Si es necesario, también puede establecer Multiline = True para poder cambiar la altura del TextBox. –

7

No, no es posible seleccionar texto en la etiqueta de Windows Form. En su lugar, puede utilizar un cuadro de texto de solo lectura para esto.

5

Utilice un TextBox con BorderStyle conjunto de None y Readonly conjunto de true y Backcolor para que coincida con el contenedor.

3

No podrá resaltar parte del texto en una etiqueta. Sin embargo, puede usar una imagen y establecerla en la propiedad Label.Image si el texto para estas etiquetas es estático.

+1

será es realmente difícil de implementar, además el texto es dinámico, por eso es necesario resaltar parte de él. – tunafish24

11

Como Bala R respondió:

"Utilizar un cuadro de texto con EstiloDeLosBordes establece en Ninguno y Sólo lectura establece en true y Backcolor para que coincida con el contenedor.".

Si la cadena de texto es muy largo, y el Width del TextBox no es suficiente para mostrar todo el texto, entonces se puede establecer la propiedad Width del TextBox para mostrar todo lo que es texto.

Si necesita saber el número correcto para Width, puede utilizar el método MeasureString de Graphics para esto. Puede obtener la instancia del método CreateGraphics() del Control (TextBox en este caso).

El primer parámetro es TextBox's Text, y el segundo parámetro es TextBox's Font. Esta función devuelve SizeF struct. Solo necesita la propiedad Ancho, convertirlo a entero con (int)size.Width o (int)Math.Round(size.Width).

No olvide llamar al método Dispose() de la instancia de gráficos después, porque ya no lo necesitará.


Puede escribir su propia función que va a hacer todo este proceso:

static void SetText(TextBox textBox, string str) 
{ 
    Graphics graphics = textBox.CreateGraphics(); 
    SizeF size = graphics.MeasureString(str, textBox.Font); 
    graphics.Dispose(); 
    textBox.Width = (int)Math.Round(size.Width); 
    textBox.Text = str; 
} 
+1

Si tiene un cuadro de texto de ancho fijo con el que desea dimensionar el alto con este código, consulte esta pregunta: https://stackoverflow.com/questions/29299297/measure-text-height-wrapped-in-a- ancho especificado – QuickDanger

Cuestiones relacionadas