将数据库中的格式化数据显示到richtextbox

本文关键字:显示 richtextbox 格式化数据 数据库 | 更新日期: 2023-09-27 18:22:35

我制作了一个程序,可以使用richtextbox将格式化的(更改字体、大小和颜色)数据添加到我的MS Access数据库中,还有一个普通的文本框来存储主题,当你点击列表框中的主题时,它会加载到列表框中,它应该在另一个richtextbox中显示格式化的文本,它完美地显示了纯文本,但只要用格式化的文本点击主题,它就会显示文本的格式:

 {'rtf'ansi'ansicpg 1252'deflang7177{'f0'fnil'fcharset 0 Microsoft Sans serif;}}
{'colortbl;'red0'green255'blue128;}
'viewkind4'uc 1'pard'cf1'fs17 now'cf0'par
}

我的代码:

private void listItem_SelectedIndexChanged(object sender, EventArgs e)
        {
            string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:'Temp'SumWizz.accdb";
            OleDbConnection conn = new OleDbConnection(connstring);
            string query = "SELECT * FROM Items WHERE Name = '" + listItem.Text + "'";
            OleDbCommand cmd = new OleDbCommand(query, conn);
            OleDbDataReader reader;
            try
            {
                conn.Open();
                reader = cmd.ExecuteReader();
                // reads the data and fills the combo box and listbox
                while (reader.Read())
                {

                    string Sdetail = reader.GetString(2);
                    richItem.Text = Sdetail;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            conn.Close();
        }

我已将richItem(我的richtextbox)更改为richItem.rtf=详细信息;然后它完美地显示了格式化的文本,但当主题选择为纯文本时,它说格式无效,我必须在另外两个地方使用它。我可以先检查文本是否具有rtf属性,或者通过任何其他方式使其同时显示纯文本和格式化文本吗?

将数据库中的格式化数据显示到richtextbox

Rich文本似乎总是以{'rtf开头(我可能错了。但这似乎是一个合理的假设)。所以,如果你检查一下,你就能做出决定。

请参阅此链接,以获得方便的扩展方法。

来自msdn论坛的代码

/// <summary>
/// Returns the DataFormat string of the text.
/// </summary>
/// <param name="text">Text to check.</param>
/// <returns>Value from the <see cref="DataFormats"/> enumeration.</returns>
public static string GetDataFormat(this string text)
{
    // First validate the text
    if (string.IsNullOrEmpty(text)) return System.Windows.DataFormats.Text;
    // Return right data
    if (text.StartsWith(@"{'rtf")) return System.Windows.DataFormats.Rtf;
    // Return default
    return System.Windows.DataFormats.Text;
}

用法:

var format = myString.GetDataFormat();
if (format == System.Windows.DataFormats.Rtf)
{
     // process RTF text
}
else 
{
    // process plain text
}