0

我制作了一个程序,可以使用富文本框将格式化(更改字体、大小和颜色)数据添加到我的 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 属性或任何其他方式以使其同时显示纯文本和格式化文本?

4

1 回答 1

0

富文本似乎总是以{\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
}
于 2013-07-15T12:01:49.573 回答