2009-07-24 14 views
5

Ho un'etichetta contenente del testo e voglio evidenziare o cambiare il colore di alcune parole nel testo dell'etichetta e non tutte le parole. Deve essere dinamico. Eventuali suggerimenti?Come evidenziare o cambiare il colore di alcune parole in un'etichetta dinamicamente in fase di runtime?

E 'per C# con ASP.NET in un controllo utente in webpart in SharePoint

+1

è questo winforms, asp.net, ecc.? –

+0

Inoltre, deve essere fatto dinamicamente? Hai bisogno di essere in grado di variare le parole che vengono cambiate? Il testo cambia? Molte variabili qui ... potrebbero essere più facili per dare alcuni esempi di ciò che stai cercando. – Beska

+0

scusa per non essere specifico ma ho bisogno che cambi dinamici durante il runtime –

risposta

10

Sul lato server, si può solo incorporare il linguaggio HTML nel testo del Label (VB):

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

Questo è il meccanismo di base, ma 'dinamica' potrebbe significare un sacco di cose qui. Se pubblichi altri dettagli su esattamente quello che stai facendo, potrei essere in grado di aiutarti di più.

Un altro pensiero: come ha sottolineato Rob Allen, il controllo Letterale può essere una scelta leggermente migliore in questa situazione poiché è inteso per emettere HTML Html, mentre l'Etichetta avvolge il testo in un intervallo in modo che l'intera cosa possa essere formattato facilmente

Check this out per maggiori dettagli: StackOverflow: Literals versus Labels

Per la cronaca, a seconda della situazione penso di un'etichetta può effettivamente essere a posto qui.

+2

Questo funzionerebbe un po 'meglio in un 'Literal' invece che in un' Label' e inoltre ha più senso semanticamente –

+0

Grazie Brian. Funziona bene. –

6

per ASP.NET,

avvolgere le parole che volete evidenziato in un <span>. Quindi imposta lo stile <span> con il colore desiderato oppure utilizza una classe CSS per farlo.

Per esempio,

<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:

Se l'impostazione di questo nel codice dietro, poi si può fare qualcosa di simile alla seguente

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(); 

Se hai bisogno di abbinare il testo già nell'etichetta contro un testo specifico, allora qualcosa di simile al seguente

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

scusa per non essere specifico ma ho bisogno che cambi dinamici durante il runtime –

0

Se si tratta di asp.net (dal momento che non è stato specificato) si fa riferimento si sta andando avere per incorporare le parole che desideri evidenziare in un'altra etichetta.

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

etichette nidificate? Funziona? Penso che non sia l'ideale, anche se funziona. Immagina il caso in cui hanno come hai, ma "un testo" seguito da "testo rosso" seguito da "testo", entrambi "alcuni testi" nell'etichetta esterna. Cosa succede quando sostituiscono il testo per quell'etichetta esterna? Come fanno a riallineare "il testo rosso" nel posto giusto. Non so. Mi dà solo i brividi. – Beska

+0

scusa per non essere specifico ma ho bisogno che cambi dinamici durante il runtime –

+0

funziona bene, era solo un esempio di come farlo. – kemiller2002

1

Avrai bisogno di essere molto più specifico. In che lingua si tratta? Stai costruendo un sito Web ASP.NET con codice C# code-behind? Questa etichetta è in un Windows Form? Fornisci il maggior numero di dettagli possibile e aggiorna i tag anche sul tuo post.

+0

sì C# con ASP.NET in un controllo utente nella webpart nel sharepoint –

1

Inizia con:

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

che vogliamo "vende mare" per essere rosso, e "in riva al mare" da evidenziare.

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

Tutto fatto!

+0

Non si è notato il tag .net. Dovrebbe essere asp: etichetta piuttosto che etichetta html dritto. –

+0

scusa per non essere specifico ma ho bisogno che cambi dinamicamente durante il runtime –

0

È possibile utilizzare uno Substitution control se la memorizzazione nella cache è un problema.

<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

ho fatto una funzione per cercare le parole in una stringa di testo e li evidenziare con il colore, il risultato viene messo in un etichetta.

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) 
Problemi correlati