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 task_id=@task_id AND ((from_usr=@from AND to_usr=@to) OR (from_usr=@to AND to_usr=@from)) 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);
            }

編集:
dr.GetValue(1).ToString()ユーザーのフルネームを
dr.GetValue(6).ToString()保持しますメッセージを保持

します上記のコードの問題は、太字で名のみが表示され、他の行は影響を受けないことです。画像を参照してここに画像の説明を入力してください
くださいコードが機能しない理由を教えてください。エラーがどこにあるのかわかりませんでした。
ありがとうございました

4

2 に答える 2

5

ここで発生している問題は、richTextBox1.SelectionStart常にゼロであるということです。つまり、書式設定はテキストボックスの最初の行にのみ適用されます。

これをに設定してみてくださいrichTextBox1.SelectionStart = richTextBox1.TextLength

編集:

に設定してみてください

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

編集2:

引数が無効なのは、の使用が原因だと思いますEnvironment.NewLine。代わりにを使用する"\n"と、コードは正常に機能します。問題はEnvironment.NewLine、もちろん\r\nWindows上にあることですが、はrichtextBox1を無視しているよう\rです。これによりrichTextBox1.TextLength - text.Length、最初の反復で-1になります。

于 2013-02-17T22:28:41.717 に答える
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);
        }
于 2013-02-17T22:36:34.230 に答える