将格式化数据从数据库显示到richtextbox

时间:2013-07-15 11:52:14

标签: c#

我制作了一个程序,可以使用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 = Sdetail; 然后它完美地显示格式化文本,但是当使用纯文本选择主题时,它表示格式无效,我必须在另外2个地方使用它。我可以做一个检查,首先检查文本是否有rtf属性或任何其他方式让它显示纯文本和格式化文本?

1 个答案:

答案 0 :(得分:0)

富文本似乎始终以{\rtf开头(我可能错了。但这似乎是一个公平的假设)。所以你检查一下,你就可以决定了。

请参阅此link以获取方便的扩展方法。

  

来自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
}