如何在运行时动态突出显示或更改标签中某些单词的颜色?

时间:2009-07-24 14:59:26

标签: c# .net asp.net

我有一个包含一些文字的标签,我想要突出显示或更改标签文本中某些单词的颜色,而不是所有单词。它必须是动态的。有什么建议吗?

在sharepoint的webpart中的用户控件中使用ASP.NET的c#

7 个答案:

答案 0 :(得分:10)

在服务器端,您可以在Label的文本(VB)中嵌入一些Html:

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

这是基本机制,但“动态”可能意味着很多事情。如果你发布一些关于你正在做什么的更多细节,我可能会提供更多帮助。

还有一个想法:正如Rob Allen指出的那样,Literal控件在这种情况下可能是稍微好一点的选择,因为它打算发出原始Html,而Label将文本包装在一个span中,以便整个事情可以被格式化容易。

查看此内容以获取更多详细信息:StackOverflow: Literals versus Labels

为了记录,根据情况,我认为标签实际上可能在这里没问题。

答案 1 :(得分:7)

对于ASP.NET,

将您想要突出显示的字词包裹在<span>中。然后将<span>样式background-color设置为您选择的颜色,或使用CSS类来执行此操作。

例如,

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

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

修改

如果在代码中设置此项,那么您可以执行以下操作

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

如果您需要将标签中已有的文字与某些特定文字进行匹配,则需要使用以下内容

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

答案 2 :(得分:2)

我创建了一个函数来查找文本字符串中的单词并用颜色突出显示它们,然后将结果放入标签中。

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)

答案 3 :(得分:1)

你需要更加具体。这是什么语言?您是否正在使用C#代码隐藏构建ASP.NET网站?此标签是否为Windows窗体?请提供尽可能详细的信息,并更新帖子上的标签。

答案 4 :(得分:1)

从:

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

我们希望“卖海”是红色的,并且要强调“海岸”。

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

全部完成!

答案 5 :(得分:0)

如果它是asp.net(因为你没有指定),你指的是你必须在另一个标签中嵌入你想要突出显示的单词。

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

答案 6 :(得分:0)

如果需要缓存,可以使用Substitution control

<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" );
}