2009-07-24 6 views
5

Ich habe ein Etikett mit etwas Text und ich möchte die Farbe einiger Wörter im Text des Etiketts und nicht alle Wörter hervorheben oder ändern. Es muss dynamisch sein. Irgendwelche Vorschläge?Wie kann man die Farbe einiger Wörter in einem Label zur Laufzeit dynamisch hervorheben oder ändern?

Es ist für C# mit ASP.NET in einer Benutzersteuerung in webpart in Sharepoint

+1

ist das winforms, asp.net, etc? –

+0

Muss es auch dynamisch gemacht werden? Müssen Sie in der Lage sein, die Wörter zu ändern, die geändert werden? Ändert sich der Text? Viele Variablen hier ... könnten am einfachsten sein, ein paar Beispiele zu geben, wonach Sie suchen. – Beska

+0

Entschuldigung, dass ich nicht spezifisch bin, aber ich brauche es dynamisch, während der Laufzeit zu ändern –

Antwort

10

Auf der Server-Seite, könnten Sie einbetten nur einige HTML in Text Ihrer Aufkleber (VB):

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

, dass der grundlegenden Mechanismus ist, aber ‚dynamisch‘ hier eine Menge Dinge bedeuten könnte. Wenn Sie mehr Details über genau das, was Sie tun, veröffentlichen, kann ich vielleicht mehr helfen. Ein weiterer Gedanke: Wie Rob Allen bemerkte, ist das Literal-Steuerelement möglicherweise eine etwas bessere Wahl in dieser Situation, da es Roh-HTML ausgeben soll, während das Etikett den Text in einer Spanne umhüllt, so dass das Ganze möglich ist leicht formatiert.

dies prüfen, um weitere Informationen aus: StackOverflow: Literals versus Labels

Für die Aufzeichnung abhängig von der Situation denke ich, ein Etikett eigentlich in Ordnung sein kann, hier.

+2

Das würde ein bisschen besser in einem 'Literal' statt einem' Label' funktionieren und auch semantisch sinnvoller sein –

+0

Danke Brian. Es funktioniert gut. –

6

für ASP.NET,

die Worte wickeln Sie in einem <span> hervorgehoben werden sollen. Stellen Sie dann den <span> Stil background-color auf die Farbe Ihrer Wahl ein oder verwenden Sie eine CSS-Klasse.

Zum Beispiel

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

oder

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

EDIT:

Wenn dies hinter in Code einstellen, dann können Sie so etwas wie die folgenden

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

Wenn Sie benötigten Text bereits auf dem Etikett gegen einen bestimmten Text dann in etwa wie folgt

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

Entschuldigung, dass ich nicht spezifisch bin, aber ich brauche es dynamisch während der Laufzeit zu ändern –

0

übereinstimmen Wenn es asp.net ist (da Sie nicht angegeben) Sie beziehen sich auf Sie haben werden um die Wörter einzubetten, die Sie in einem anderen Etikett hervorheben möchten.

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

Verschachtelte Etiketten? Funktioniert es? Ich denke, das ist nicht ideal, auch wenn es funktioniert. Stellen Sie sich den Fall vor, in dem sie wie Sie haben, aber "etwas Text", gefolgt von "rotem Text", gefolgt von "etwas Text", beide "einige Texte" auf dem äußeren Etikett. Was passiert, wenn sie den Text für dieses äußere Etikett ersetzen? Wie richten sie "roten Text" an der richtigen Stelle aus? Ich weiß nicht. Gibt mir nur die Willies. – Beska

+0

Sorry für nicht spezifisch, aber ich brauche es dynamisch zu ändern während der Laufzeit –

+0

funktioniert gut, es war nur ein Beispiel dafür, wie es geht. – kemiller2002

1

Sie werden viel spezifischer sein müssen. In welcher Sprache ist das? Bauen Sie eine ASP.NET-Website mit C# -Code-Behind? Ist dieses Label in einem Windows Form? Bitte geben Sie so viele Details wie möglich an und aktualisieren Sie die Tags in Ihrem Beitrag.

+0

yeah C# mit ASP.NET in einem Benutzersteuerelement im Webpart im Sharepoint –

1

mit Beginn:

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

Wir wollen „verkauft Meer“, rot zu sein, und „das Meer“ hervorgehoben werden.

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

Alles fertig!

+0

Das .net-Tag nicht bemerkt. Sollte asp sein: Label lieber als gerade html Label. –

+0

Entschuldigung, dass ich nicht spezifisch bin, aber ich brauche es dynamisch während der Laufzeit zu ändern –

0

Sie könnten eine Substitution control verwenden, wenn Caching ein Problem ist.

<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

Ich habe eine Funktion gemacht, Wörter in einer Textzeichenfolge nachzuschlagen und sie mit Farbe zu markieren, das Ergebnis wird in ein Etikett eingefügt.

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) 
Verwandte Themen