2009-07-24 21 views
5

Tengo una etiqueta que contiene texto y quiero resaltar o cambiar el color de algunas palabras en el texto de la etiqueta y no en todas. Tiene que ser dinámico. ¿Alguna sugerencia?¿Cómo resaltar o cambiar dinámicamente el color de algunas palabras en una etiqueta en el tiempo de ejecución?

Es para C# con ASP.NET en un control de usuario en elemento Web en SharePoint

+1

es esto winforms, asp.net, etc.? –

+0

Además, ¿tiene que hacerse de forma dinámica? ¿Necesita poder variar las palabras que se cambian? ¿El texto cambia? Hay muchas variables aquí ... podría ser más fácil dar algunos ejemplos de lo que estás buscando. – Beska

+0

disculpa por no ser específico pero lo necesito para cambiar durante el tiempo de ejecución dinámico –

Respuesta

10

En el lado del servidor, sólo podría incorporar algo de HTML en el texto de su etiqueta (VB):

myLabel.Text="Some normal text <span style='color: red;'>some red text</span>" 

Ese es el mecanismo básico, pero 'dinámica' puede significar muchas cosas aquí. Si publica más detalles sobre lo que está haciendo exactamente, podría ayudarlo más.

Un pensamiento más: como Rob Allen señaló, el control Literal puede ser una opción un poco mejor en esta situación ya que está destinado a emitir HTML en bruto, mientras que la etiqueta ajusta el texto en un lapso para que todo pueda ser formateado fácilmente

mira esto para más detalles: StackOverflow: Literals versus Labels

Para el registro, dependiendo de la situación creo que una etiqueta puede ser realmente bien aquí.

+2

Esto funcionaría un poco mejor en un 'Literal' en lugar de una' Etiqueta' y también tiene más sentido semánticamente –

+0

Gracias Brian. Funciona bien. –

6

para ASP.NET,

envolver las palabras que quiere resaltada en un <span>. A continuación, configure el estilo <span>background-color en el color que desee, o use una clase CSS para hacerlo.

Por ejemplo,

<asp:Label runat="server"> 
    <span style="background-color:Blue;">Hello</span> World 
</asp:Label> 

o

<asp:Label runat="server" Text="<span style='background-color:Blue;'>Hello</span> World" /> 

EDIT:

Si no puede configurar esto en código detrás, entonces usted puede hacer algo como lo siguiente

StringBuilder builder = new StringBuilder(); 
builder.Append([start of text]); 
builder.Append("<span style=\"background-color:Blue;\">"); 
builder.Append([text to highlight]); 
builder.Append("</span>"); 
builder.Append([rest of text]); 

Label.Text = builder.ToString(); 

Si usted necesita para que coincida con el texto que ya están en la etiqueta en contra de un texto específico, entonces algo como lo siguiente

string theTextToMatch = "[Text to match]"; 
string theText = Label.Text; 

int leftIndex = theText.IndexOf(theTextToMatch, StringComparison.OrdinalIgnoreCase); 
int rightIndex = leftIndex + theTextToMatch.Trim().Length; 

StringBuilder builder = new StringBuilder(); 
builder.Append(theText , 0, leftIndex); 
builder.Append("<span style=\"background-color:Blue;\">"); 
builder.Append(theText, leftIndex, rightIndex - leftIndex); 
builder.Append("</span>"); 
builder.Append(theText, rightIndex, theText.Length - rightIndex); 

Label.Text = builder.ToString(); 
+0

disculpa por no ser específica, pero la necesito dinámica para cambiar durante el tiempo de ejecución –

0

Si es asp.net (ya que no se ha especificado) se está refiriendo a la que se va tiene para insertar las palabras que desea resaltar en otra etiqueta.

<asp:label runat="server" id="nonRed">some text 
     <asp:label runat="server" id="redText" style="color:Red">Red Text</asp:label> 
    </asp:label> 
+0

Etiquetas anidadas? ¿Eso funciona? Creo que eso no es ideal, incluso si funciona. Imagine el caso en el que tienen como usted, pero "algún texto" seguido de "texto rojo" seguido de "algún texto", ambos "algunos textos" en la etiqueta externa. ¿Qué sucede cuando reemplazan el texto de esa etiqueta externa? ¿Cómo realinean el "texto rojo" en el lugar correcto? No se. Solo me da los pelos de punta. – Beska

+0

disculpa por no ser específico pero lo necesito para cambiar durante el tiempo de ejecución –

+0

funciona bien, fue solo un ejemplo de cómo hacerlo. – kemiller2002

1

Tendrá que ser mucho más específico. ¿En qué idioma está esto? ¿Está construyendo un sitio web ASP.NET con código C detrás? ¿Esta etiqueta está en Windows Form? Proporcione todos los detalles que pueda y actualice las etiquetas en su publicación también.

+0

sí C# con ASP.NET en un control de usuario en webpart en sharepoint –

1

A partir de:

<label> She sells sea shells by the sea shore </label> 

que queremos "vende mar" ser rojo, y "la orilla del mar" a destacar.

<label> She <font color="red">sea shells</font> by <font style="BACKGROUND-COLOR: yellow">the sea shore</font></label> 

¡Todo listo!

+0

No noté la etiqueta .net. Debería ser asp: etiqueta en lugar de etiqueta recta html. –

+0

disculpa por no ser específico, pero lo necesito dinámico para cambiar durante el tiempo de ejecución –

0

Puede usar Substitution control si el almacenamiento en caché es una preocupación.

<asp:Label ID="Label1" runat="server" Text=""> 
    <asp:Substitution ID="Substitution1" runat="server" MethodName="GetDynamicLabel"/> 
</asp:Label> 

protected static string GetDynamicLabel(HttpContext context) 
{ 
    return string.Format("<span style='background-color:Blue;'>{0}</span> {1}", "Blue", "Not Blue"); 
} 
1

Hice una función para buscar palabras en una cadena de texto y resaltarlas con color, el resultado se coloca en una etiqueta.

Function Remarcar(ByVal palabra As String, ByVal texto As String) As String 

    Dim textoNuevo As String = String.Empty 

    If Not String.IsNullOrEmpty(palabra) Then 
     Dim split As String() = texto.Split(New Char() {" "c}) 

     For Each str As String In split 
      If str.ToLower.Contains(palabra.ToLower) Then 

       Dim a As String = String.Empty 
       Dim b As Int32 

       For i = 0 To str.Length 
        If str.ToLower.Substring(i, palabra.Length) = palabra.ToLower Then 
         a = str.Substring(i, palabra.Length) 
         b = i 
         Exit For 
        End If 
       Next 

       textoNuevo &= str & " " 

       textoNuevo = textoNuevo.Replace(str.Substring(b, palabra.Length), "<span style=""background-color:Yellow;"">" & a & "</span>") 
      Else 
       textoNuevo &= str & " " 
      End If 
     Next 
    Else 
     textoNuevo = texto 
    End If 

    Return textoNuevo 
End Function 





     Dim texto As String = "I made a function to look up words in a text string and highlight them with color, the result is put into a label." 

     Label1.Text = Remarcar("highlight", texto) 
Cuestiones relacionadas