3

因此,我正在使用 Visual Basic 开发基于控制台的应用程序,但遇到了问题。我正在尝试将颜色添加到控制台,但只添加到该行中的 1 个单词。我知道该Console.ForegroundColor = ConsoleColor.Red选项,但该颜色是整行而不是行中的 1 个单词。我将在下面提供一些示例。

这是一些示例代码:

'If I use it like this the whole line will turn red
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Hello stackoverflow, I need some help!")

如上所述,整条线都变红了。如果我只希望“stackoverflow”这个词是红色而句子的其余部分保持正常颜色怎么办?

是否有可能做到这一点?

提前致谢。

4

3 回答 3

8
Console.Write("Hello ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("stackoverflow");
Console.ResetColor();
Console.WriteLine(", I need some help!");

您可能想要标记您的字符串并使用某种模式匹配函数来构建可重用的东西。

为字符串中的单个单词着色(添加逻辑来处理逗号和句点):

private static void colorize(string expression, string word) 
{
    string[] substrings = expression.Split();

    foreach (string substring in substrings)
    {
        if (substring.Contains(word))
        {
            Console.ForegroundColor = ConsoleColor.Red;
        }
        Console.Write(substring+" ");
        Console.ResetColor();
    }
    Console.WriteLine();
}
于 2013-10-27T23:49:39.210 回答
1

您还可以使用字符串列表和颜色列表。字符串列表中的第一个字符串从颜色列表中获取第一个颜色,依此类推。

Sub Write(ByRef strings As IEnumerable(Of String), ByRef colors As IEnumerable(Of ConsoleColor))
    Dim i As Integer = 0
    For Each s In strings
        Console.ForegroundColor = colors(i)
        Console.Write(s)
        i += 1
    Next
End Sub

例子:

Write({"Hello ", "stackoverflow, ", "i ", "need ", "some ", "help "}, {Red, Green, Yellow, Magenta, Gray, Cyan})
于 2016-03-23T17:16:10.643 回答
0
Private Shared Sub colorize(ByVal expression As String, ByVal word As String)
    Dim substrings() As String = expression.Split()

    For Each substring As String In substrings
        If substring.Contains(word) Then
            Console.ForegroundColor = ConsoleColor.Red
        End If
        Console.Write(substring &" ")
        Console.ResetColor()
    Next substring
    Console.WriteLine()
End Sub
于 2016-08-04T23:51:30.563 回答