调用片段            if (MessageObjs != null)
            {
                foreach (MessageClass mc in MessageObjs)
                {
                    InitShow(mc);
                }
            }
控件操作片段        private void InitShow(MessageClass message)
        {
            if (message.FromUserType == UserType.Manager)
            {
                int start = this.txtMessageShow.Text.LastIndexOf("\n") + 1;
                this.txtMessageShow.Text += "(" + message.FromUserID + ")" + message.FromUserName
                    + "(" + message.SendDataTime + ")" + "——说:" + "\r\n" + message.Message + "\r\n";
                this.txtMessageShow.SelectionStart = start;
                this.txtMessageShow.SelectionLength = txtMessageShow.Lines[txtMessageShow.Lines.Length - 3].Length;
                this.txtMessageShow.SelectionColor = Color.Green;
                this.txtMessageShow.SelectionLength = 0;
                start = start + txtMessageShow.Lines[txtMessageShow.Lines.Length - 3].Length + 1;
                this.txtMessageShow.SelectionStart = start;
                this.txtMessageShow.SelectionLength = txtMessageShow.Lines[txtMessageShow.Lines.Length - 2].Length;
                this.txtMessageShow.SelectionColor = Color.Black;
                this.txtMessageShow.SelectionLength = 0;
            }
        }
如图:
没有达到预期的效果
设置的颜色只有最后一句起了作用求达到类似 QQ 聊天记录显示效果的解决方法! 

解决方案 »

  1.   

    你方法InitShow里面,每次都是
    重新给txtMessageShow赋值:
    this.txtMessageShow.Text += "(" + message.FromUserID + ")" + message.FromUserName
                        + "(" + message.SendDataTime + ")" + "——说:" + "\r\n" + message.Message + "\r\n";
    每次重新赋值都把以前的值覆盖掉了,值都被你覆盖了,你设置的颜色哪里还有?
      

  2.   

    this.txtMessageShow.Text += "(" + message.FromUserID + ")" + message.FromUserName
                        + "(" + message.SendDataTime + ")" + "——说:" + "\r\n" + message.Message + "\r\n";
    这个的全写是:
    this.txtMessageShow.Text = this.txtMessageShow.Text + "(" + message.FromUserID + ")" + message.FromUserName
                        + "(" + message.SendDataTime + ")" + "——说:" + "\r\n" + message.Message + "\r\n";
    this.txtMessageShow.Text的取值不能把颜色一起取出来吧
      

  3.   

    1)不要用Lines,请直接定位
    2)设置SelectionLength不起任何作用,请用Select选择具体的范围
    3)不要用+操作符来增加text,使用AppendText方法
    string[] messages = { "a", "a-talk", "b", "b-talk" };
                for(int i = 0; i < messages.Length; i++)
                {
                        string msg = messages[i];
                        //Locate to last position
                        richTextBox1.Select(richTextBox1.Text.Length, 0);
                        //Append message
                        richTextBox1.AppendText(msg);
                        //Refresh rich text box selection
                        richTextBox1.Select(richTextBox1.SelectionStart, msg.Length);
                        //Assign selection fore color
                        richTextBox1.SelectionColor = i % 2 == 0 ? Color.Green : Color.Black;
                        //Append new line
                        richTextBox1.AppendText(Environment.NewLine);
                }
      

  4.   

    string user = "(" + message.FromUserID + ")" + message.FromUserName + "(" + message.SendDataTime + ")" + "——说:";
                    //Locate to last position
                    txtMessageShow.Select(txtMessageShow.Text.Length, 0);
                    //Append message
                    txtMessageShow.AppendText(user);
                    //Refresh rich text box selection
                    txtMessageShow.Select(txtMessageShow.SelectionStart - user.Length, user.Length);
                    //Assign selection fore color
                    txtMessageShow.SelectionColor = Color.Green;
                    //Append new line
                    txtMessageShow.AppendText(Environment.NewLine);
                    string meg = message.Message;
                    //Locate to last position
                    txtMessageShow.Select(txtMessageShow.Text.Length, 0);
                    //Append message
                    txtMessageShow.AppendText(meg);
                    //Refresh rich text box selection
                    txtMessageShow.Select(txtMessageShow.SelectionStart - meg.Length, meg.Length);
                    //Assign selection fore color
                    txtMessageShow.SelectionColor = Color.Black;
                    //Append new line
                    txtMessageShow.AppendText(Environment.NewLine);你的程序有BUG修改了一下 成功了 多谢