Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体Richtextbox。如何在'中查找粗体、下划线和其他文本格式;rtf&x27;并为第三方供应商插入其他标签_C#_.net_Vb.net - Fatal编程技术网

C# Windows窗体Richtextbox。如何在'中查找粗体、下划线和其他文本格式;rtf&x27;并为第三方供应商插入其他标签

C# Windows窗体Richtextbox。如何在'中查找粗体、下划线和其他文本格式;rtf&x27;并为第三方供应商插入其他标签,c#,.net,vb.net,C#,.net,Vb.net,谢谢你的阅读 我将RTF文本存储在一个数据库列中,该列可以包含来自Windows窗体Richtextbox的粗体、斜体、下划线和其他文本格式。我们需要将文本导出到具有不同定义的标记集的第三方供应商,该标记集告诉供应商如何格式化文本。不幸的是,第三方供应商不能读取RTF格式,也不能读取HTML、XML等 我们需要在richtextbox中导出“纯”文本,但找到用户在文本中添加粗体、斜体、下划线和其他格式的位置,并替换为第三方供应商标记 例如。。。我需要解析下面的rtf之类的东西 {\rtf1\an

谢谢你的阅读

我将RTF文本存储在一个数据库列中,该列可以包含来自Windows窗体Richtextbox的粗体、斜体、下划线和其他文本格式。我们需要将文本导出到具有不同定义的标记集的第三方供应商,该标记集告诉供应商如何格式化文本。不幸的是,第三方供应商不能读取RTF格式,也不能读取HTML、XML等

我们需要在richtextbox中导出“纯”文本,但找到用户在文本中添加粗体、斜体、下划线和其他格式的位置,并替换为第三方供应商标记

例如。。。我需要解析下面的rtf之类的东西

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Verdana;}\viewkind4\uc1\pard\f0\fs18这是\b bold\par\par\b0这是\b\b0\i斜体\par\par\i0这是\ul underline\ulnone\par}

并创建如下内容:

“这是[B]粗体[B]

这是斜体字

这是[U]下划线[U]”

有人知道如何做到这一点吗


非常感谢您的帮助。

谢谢您的评论。虽然不是很有效,也不是很优雅,但这正是我所需要的。再次感谢大家

 Public Shared Function ParseRTF(ByRef rtf As RichTextBox) As String
        Dim returnText As String = ""
        Dim isBold As Boolean = False
        Dim isUnderline As Boolean = False
        Dim isItalics As Boolean = False
        Dim isBullets As Boolean = False

        Dim isBoldBegin As Boolean = False
        Dim isUnderlineBegin As Boolean = False
        Dim isItalicsBegin As Boolean = False
        Dim isBulletsBegin As Boolean = False

        Dim isBoldEnd As Boolean = False
        Dim isUnderlineEnd As Boolean = False
        Dim isItalicsEnd As Boolean = False
        Dim isBulletsEnd As Boolean = False

        Dim tags As String = String.Empty

        Dim bold As String = "<B>"
        Dim underline As String = "<U>"
        Dim italics As String = "<I>"
        Dim bullet As String = "<T2><BULLET>"
        Dim newLine As String = "<NL>"
        Dim lastChar As String = String.Empty

        rtf.SelectionStart = 0
        rtf.SelectionLength = 0

        Try

            For x As Integer = 0 To rtf.TextLength - 1
                rtf.SelectionStart = x
                rtf.SelectionLength = 1
                tags = String.Empty
                isBoldBegin = False
                isBoldEnd = False
                isUnderlineBegin = False
                isUnderlineEnd = False
                isItalicsBegin = False
                isItalicsEnd = False

                'Test if text has formatting
                If rtf.SelectionFont.Bold Then
                    If Not isBold Then
                        isBoldBegin = True
                        isBold = True
                        isBoldEnd = False
                    End If
                Else
                    If isBold Then
                        isBoldBegin = False
                        isBold = False
                        isBoldEnd = True
                    End If
                End If

                If rtf.SelectionFont.Italic Then
                    If Not isItalics Then
                        isItalicsBegin = True
                        isItalics = True
                        isItalicsEnd = False
                    End If
                Else
                    If isItalics Then
                        isItalicsBegin = False
                        isItalics = False
                        isItalicsEnd = True
                    End If
                End If

                If rtf.SelectionFont.Underline Then
                    If Not isUnderline Then
                        isUnderlineBegin = True
                        isUnderline = True
                        isUnderlineEnd = False
                    End If
                Else
                    If isUnderline Then
                        isUnderlineBegin = False
                        isUnderline = False
                        isUnderlineEnd = True
                    End If
                End If
                'END Test if text has formatting


                ' Do reverse order if for any "END" tags
                If isUnderlineEnd Then
                    tags += underline
                End If

                If isItalicsEnd Then
                    tags += italics
                End If

                If isBoldEnd Then
                    tags += bold
                End If

                'Work with beginning tags
                If isBoldBegin Then
                    tags += bold
                End If

                If isItalicsBegin Then
                    tags += italics
                End If

                If isUnderlineBegin Then
                    tags += underline
                End If

                If x = rtf.TextLength - 1 Then
                    If isUnderline Then
                        lastChar += underline
                    End If
                    If isItalics Then
                        lastChar += italics
                    End If
                    If isBold Then
                        lastChar += bold
                    End If
                End If

                If rtf.SelectedText.Contains(vbLf) Then
                    If Not String.IsNullOrWhiteSpace(tags) Then
                        If isBoldBegin Or isUnderlineBegin Or isItalicsBegin Then
                            returnText += newLine & tags
                        End If

                        If isBoldEnd Or isUnderlineEnd Or isItalicsEnd Then
                            returnText += tags & newLine
                        End If
                    Else
                        returnText += newLine
                    End If
                Else
                    returnText += tags & rtf.SelectedText
                End If

                If Not String.IsNullOrWhiteSpace(lastChar) Then
                    returnText += lastChar
                End If
            Next

            Return returnText


        Catch ex As Exception
            Throw New CvrException(ex, ErrorCodes.UNKNOWN_ERROR)
        Finally
        End Try
    End Function
公共共享函数ParseRTF(ByRef rtf作为RichTextBox)作为字符串
Dim returnText As String=“”
Dim isBold作为布尔值=False
Dim isUnderline为布尔值=False
将isItalics设置为布尔值=False
将项目符号设置为布尔值=False
Dim isBoldBegin为布尔值=False
Dim isUnderlineBegin作为布尔值=False
Dim isItalicsBegin As Boolean=False
尺寸isBulletsBegin为布尔值=假
Dim isBoldEnd为布尔值=False
尺寸显示为布尔值=假
Dim isItalicsEnd为布尔值=False
Dim isBulletsEnd As Boolean=False
Dim标记为String=String.Empty
暗黑体为String=“”
将下划线变暗为字符串=“”
将斜体标注为String=“”
将项目符号变暗为String=“”
将换行符变暗为字符串=“”
Dim lastChar As String=String.Empty
rtf.SelectionStart=0
rtf.SelectionLength=0
尝试
对于x作为整数=0到rtf.TextLength-1
rtf.SelectionStart=x
rtf.SelectionLength=1
tags=String.Empty
isBoldBegin=False
isBoldEnd=False
isUnderlineBegin=False
isd=False
isItalicsBegin=False
isItalicsEnd=False
'测试文本是否具有格式
如果rtf.SelectionFont.Bold,则
如果不是的话,请用粗体
isBoldBegin=True
isBold=True
isBoldEnd=False
如果结束
其他的
如果是粗体的话
isBoldBegin=False
isBold=False
isBoldEnd=True
如果结束
如果结束
如果rtf.SelectionFont.Italic,则
如果不是伊斯兰主义者,那么
isItalicsBegin=True
伊斯兰主义=真
isItalicsEnd=False
如果结束
其他的
如果是伊斯兰主义者那么
isItalicsBegin=False
isItalics=错误
isItalicsEnd=True
如果结束
如果结束
如果rtf.SelectionFont.Underline,则
如果不是,那么
isUnderlineBegin=True
isUnderline=True
isd=False
如果结束
其他的
如果是下划线,那么
isUnderlineBegin=False
isUnderline=False
isd=True
如果结束
如果结束
'如果文本具有格式,则结束测试
'如果有任何“结束”标记,请按相反顺序执行
如果我被解雇了
标记+=下划线
如果结束
如果是isItalicsEnd那么
标记+=斜体
如果结束
如果是boldend,那么
标签+=粗体
如果结束
'使用开始标记
如果我开始的话
标签+=粗体
如果结束
如果是伊斯兰主义,那就开始吧
标记+=斜体
如果结束
如果是我的话
标记+=下划线
如果结束
如果x=rtf.TextLength-1,则
如果是下划线,那么
lastChar+=下划线
如果结束
如果是伊斯兰主义者那么
lastChar+=斜体
如果结束
如果是粗体的话
lastChar+=粗体
如果结束
如果结束
如果rtf.SelectedText.Contains(vbLf),则
如果不是String.IsNullOrWhiteSpace(标记),则
如果isBoldBegin或isUnderlineBegin或isItalicsBegin,则
returnText+=换行符和标记
如果结束
如果isBoldEnd或IsUnderlined或isItalicsEnd,则
returnText+=标记和换行符
如果结束
其他的
returnText+=换行符
如果结束
其他的
返回文本