2013-02-17 2 views
1

Я создаю приложение чата, и я хочу отображать имена в Полужирный. Когда форма первая загрузка, я отображение истории разговора из базы данных в элементе управления RichTextBox с использованием этих строк коды, и я хочу, чтобы отобразить имя шрифта:Почему эти строки кода не работают так, как ожидалось?

Вот весь код, чтобы сделать это возможным:

string strProvider = "Data Source=" + srv_host + ";Database=" + srv_db + ";User ID=" + srv_user + ";Password=" + srv_pass; 
     MySqlConnection myConn = new MySqlConnection(strProvider); 
     try 
     { 
      myConn.Open(); 
      string strCmd = "SELECT * FROM comments WHERE [email protected]_id AND (([email protected] AND [email protected]) OR ([email protected] AND [email protected])) ORDER BY at_time ASC"; 
      MySqlCommand myCmd = new MySqlCommand(strCmd, myConn); 
      myCmd.Parameters.AddWithValue("from", frm_usr); 
      myCmd.Parameters.AddWithValue("to", to_usr); 
      myCmd.Parameters.AddWithValue("task_id", tid); 
      myCmd.ExecuteNonQuery(); // execute now 

      MySqlDataReader dr = myCmd.ExecuteReader(); 

      while (dr.Read()) 
      { 
       string text = dr.GetValue(1).ToString() + ": " + dr.GetValue(6) + Environment.NewLine; 
       richTextBox1.AppendText(text); 
       richTextBox1.SelectionStart = 0; 
       richTextBox1.SelectionLength = dr.GetValue(1).ToString().Length; 
       richTextBox1.SelectionFont = new Font(richTextBox1.Font,FontStyle.Bold); 
      } 

      myConn.Dispose(); 
     } 


     catch (Exception E) { MessageBox.Show(E.Message); } 

И эти строки кода, который не работает, как ожидалось:

while (dr.Read()) 
      { 
       string text = dr.GetValue(1).ToString() + ": " + dr.GetValue(6) + Environment.NewLine; 
       richTextBox1.AppendText(text); 
       richTextBox1.SelectionStart = 0; 
       richTextBox1.SelectionLength = dr.GetValue(1).ToString().Length; 
       richTextBox1.SelectionFont = new Font(richTextBox1.Font,FontStyle.Bold); 
      } 

Edit:
dr.GetValue(1).ToString() Удерживает полное имя пользователя
dr.GetValue(6).ToString() Удерживать сообщение

Проблема с приведенным выше кодом заключается в том, что он отображает только первое имя в жирном, но другие строки не затрагиваются. См. Изображение enter image description here
Может кто-нибудь, пожалуйста, объясните причину, по которой код не работает. Я не мог понять, где ошибка.
Thank-you

+0

Какие рамки? WPF или Winforms Edit: Nevermind, я вижу его winforms –

ответ

5

Проблема, с которой вы сталкиваетесь, состоит в том, что richTextBox1.SelectionStart всегда равен нулю, что означает, что форматирование будет применяться только к первой строке в текстовом поле.

Попробуйте установить это на richTextBox1.SelectionStart = richTextBox1.TextLength.

Edit:

Попробуйте установить

richTextBox1.SelectionStart = richTextBox1.TextLength - text.Length; 

Edit 2:

Я думаю, что Недопустимый аргумент, что вызвано использованием Environment.NewLine. Если я использую вместо этого "\n", код работает нормально. Проблема в том, что Environment.NewLine, конечно, \r\n на Windows, но richtextBox1, кажется, игнорирует \r. Это приводит к тому, что richTextBox1.TextLength - text.Length равен -1 на первой итерации.

+0

Это не работает. Я получил весь текст жирным шрифтом, кроме первой строки в обычном шрифте ??! –

+0

@ShikataGaNai См. Мое редактирование. –

+0

Недопустимое значение аргумента -1 недействительно для 'SelectionStart' Имя параметра: SelectionStart –

0

Я не могу проверить, но это может быть потому, что индекс SelectionStart всегда 0, попробуйте установить его в начале линии, которую вы только что добавили

 while (dr.Read()) 
     { 
      string text = dr.GetValue(1).ToString() + ": " + dr.GetValue(6) + Environment.NewLine; 
      richTextBox1.AppendText(text); 
      richTextBox1.SelectionStart = richTextBox1.GetFirstCharIndexOfCurrentLine(); 
      richTextBox1.SelectionLength = dr.GetValue(1).ToString().Length; 
      richTextBox1.SelectionFont = new Font(richTextBox1.Font,FontStyle.Bold); 
     } 
+0

тоже не работает :(У меня все выделены жирным шрифтом, кроме первого –

Смежные вопросы