0

というテキストボックスがtxtMessagesあり、そのテキストボックスのテキストの色を変更したいのですが、テキスト全体ではありません例:

KraToS : こんにちは、問題があります

( ) が赤く塗られている部分の KrAToS が必要ですがthis.client.NetworkName、残りのテキストは黒のままです。

これが私のコードです:誰でも助けてくれることを願っています

    private void SendMessage()
    {
        if ( this.client.Connected && this.txtNewMessage.Text.Trim() != "" )
        {
            this.client.SendCommand(new Proshot.CommandClient.Command(Proshot.CommandClient.CommandType.Message , IPAddress.Broadcast , this.txtNewMessage.Text));
            this.txtMessages.Text += this.client.NetworkName;
            this.txtMessages.Text += " : " + this.txtNewMessage.Text.Trim() + Environment.NewLine;
            this.txtNewMessage.Text = "";
            this.txtNewMessage.Focus();
        }
    }
4

1 に答える 1

0

これを試して、キーワードを一致させ、必要に応じて色を付けることができます。

Dictionary<string,Color> dict = new Dictionary<string,Color>(StringComparer.CurrentCultureIgnoreCase);
dict.Add(client.NetworkName,Color.Red);
//you can add more pairs
//build the pattern whenever you finish adding more entries to your dict    
string pattern = string.Format("(?i)({0})",string.Join("|",dict.Select(el=>el.Key).ToArray()));
[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);
//TextChanged event handler for your richTextBox1
private void richTextBox1_TextChanged(object sender, EventArgs e) {
        int currentIndex = richTextBox1.SelectionStart;
        int currentSelectionLength = richTextBox1.SelectionLength;
        //BeginUpdate
        SendMessage(richTextBox1.Handle, 0xb, IntPtr.Zero, IntPtr.Zero);
        var matches = Regex.Matches(richTextBox1.Text, pattern);
        richTextBox1.SelectAll();
        richTextBox1.SelectionColor = Color.Black;
        foreach (Match m in matches)
        {
            richTextBox1.SelectionStart = m.Index;
            richTextBox1.SelectionLength = m.Length;
            richTextBox1.SelectionColor = dict[m.Value];
        }
        richTextBox1.SelectionStart = currentIndex;
        richTextBox1.SelectionLength = currentSelectionLength;
        //EndUpdate
        SendMessage(richTextBox1.Handle, 0xb, new IntPtr(1), IntPtr.Zero);            
        richTextBox1.Invalidate();
}
于 2013-09-06T18:39:11.300 に答える