تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
(تم الحل) كيف يتم جمع محتويات 2 Richtextbox أو أكثر عن طريق Rtf
#1
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

كيف يتم جمع محتويات 2 Richtextbox أو أكثر عن طريق Rtf
إذا كان لدي مجموعة من Richtextbox وكانمت بداخلهم نصوص منسقة بألوان مختلفة وأردت جمعهم في Richtextbox أخير استخدمت Richtextbox1.Rtf= Richtextbox2.Rtf & Richtextbox3.Rtf
ولكن لم تنجح الطريقة مثل الخاصية Text
فكيف يتم جمعهم
شكرا
الرد }}}}
تم الشكر بواسطة:
#2
أفضل وأسهل طريقة هي أن تقوم بدمج النصين عن طريق النسخ واللصق مستفيدا بذلك من معالجة البيانات الموجود داخل أداة RichTextBox
مثال
إذا كان لديك أداتين من نوع RichTextBox
وتريد دمج نصيهما فاستعمل أداة ثالثة وقم بنسخ محتويات النص الأول والصقه في الأداة الثالثة ثم انسخ بيانات النص في الأداة الثانية والصقها في الأداة الثالثة مرة أخرى وبذلك دمجت النصين بكل يسر وسهولة
وهذا هو الكود
كود :
RichTextBox1.SelectAll()
        RichTextBox1.Copy()
        RichTextBox3.Paste()

        RichTextBox3.AppendText(vbNewLine)  ' ترك سطر جديد فاصل بين النصين

        RichTextBox2.SelectAll()
        RichTextBox2.Copy()
        RichTextBox3.Paste()

بالتوفيق
الرد }}}}
تم الشكر بواسطة:
#3
شكرا لك أخي sooriaty03 في الحقيقة جاءتني هذه الفكرة ولكني طبقتها بطريقة خاطئة وكنت أطتلع لوجود طريقة لا تعتمد علي الحافظة لكني سأطبقها إن شاء الله
الرد }}}}
تم الشكر بواسطة:
#4
وعليكم السلام ورحمة الله وبركاته

تفضل هالطريقة بدون عملية نسخ :
كود :
Public Function MargeRTF(str1 As String, str2 As String)
        Dim FontTable1 = (From Txt In Strings.Split(JustAfter(str1, "{\fonttbl", "}}") & "}", "}{") Select Txt.TrimStart("{").TrimEnd("}"))
        Dim FontTable2 = (From Txt In Strings.Split(JustAfter(str2, "{\fonttbl", "}}") & "}", "}{") Select Txt.TrimStart("{").TrimEnd("}"))
        Dim ColorTable1 = (From Txt In Strings.Split(JustAfter(str1, "{\colortbl ;", "}"), ";") Select Txt Where Txt.Trim.Length > 0)
        Dim ColorTable2 = (From Txt In Strings.Split(JustAfter(str2, "{\colortbl ;", "}"), ";") Select Txt Where Txt.Trim.Length > 0)
        Dim Text1 As String = JustAfter(str1, ";}" & Chr(13), "}")
        Dim Text2 As String = JustAfter(str2, ";}" & Chr(13), "}")
        Dim HeaderText As String = JustAfter(str1, "{", "{")
        Dim MargedText As String = ""
        Dim FontTable As New List(Of String)
        Dim ColorTable As New List(Of String)
        If Text1 Is Nothing Then Text1 = JustAfter(str1, "}}" & Chr(13), "}")
        If Text2 Is Nothing Then Text2 = JustAfter(str2, "}}" & Chr(13), "}")
        FontTable.AddRange(FontTable1)
        ColorTable.AddRange(ColorTable1)
        ColorTable.AddRange(ColorTable2)
        For I = 0 To FontTable2.Count - 1
            FontTable.Add(FontTable1(I).Replace("\f" & I, "\f" & FontTable1.Count + I))
        Next
        Dim Font As String = "{" & Strings.Join(FontTable.ToArray, "}{").Replace("}}{{", "}{") & "}"
        Dim Color As String = Strings.Join(ColorTable.ToArray, ";") & ";"
        For I = 0 To FontTable2.Count - 1
            Text2 = Text2.Replace("\f" & I, "\f" & FontTable1.Count + I)
        Next
        For I = 1 To ColorTable2.Count
            Text2 = Text2.Replace("\cf" & I, "\cf" & ColorTable1.Count + I)
        Next
        MargedText += "{" & HeaderText & "{\fonttbl" & Font & "}" & vbNewLine
        MargedText += "{\colortbl ;" & Color & "}" & vbNewLine
        MargedText += Text1 & vbNewLine
        MargedText += Text2 & vbNewLine & "}"
        Return MargedText
    End Function

    Public Function JustAfter(ByVal Str As String, ByVal Seq As String, ByVal SeqEnd As String) As String
        Dim Orgi As String = Str
        Try
            Str = Str.ToLower()
            Seq = Seq.ToLower()
            SeqEnd = SeqEnd.ToLower()
            Dim i As Integer = Str.IndexOf(Seq)
            If i < 0 Then Return Nothing

            i = i + Seq.Length
            Dim j As Integer = Str.IndexOf(SeqEnd, i)
            Dim [end] As Integer
            If j > 0 Then [end] = j - i Else [end] = Str.Length - i

            Return Orgi.Substring(i, [end])
        Catch generatedExceptionName As Exception
            Return ""
        End Try
    End Function

كود :
RichTextBox3.Rtf = MargeRTF(RichTextBox1.Rtf, RichTextBox2.Rtf)


وفقك الله
الرد }}}}
تم الشكر بواسطة:
#5
شكرا لك أخي Osama_Ghareeb ولكن إذا كان الكود بهذا الطول فالحافظة أفضل Smile
الرد }}}}
تم الشكر بواسطة:
#6
إقتباس :
jhhhhhhhhhhhhhhhhhhhhhhhhhh
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] كود البحث عن طريق اسم naden 1 84 28-11-16, 02:05 PM
آخر رد: Adrees
  sms كيف أرسل عن طريق برنامجي adel27 6 127 22-11-16, 09:17 PM
آخر رد: adel27
  [VB.NET] ربط الداتا بيز بالكريستال ريبورت عن طريق الكود thevirus 3 119 22-11-16, 02:38 PM
آخر رد: thevirus
  استدعاء داتا من الداتا بيز عن طريق المعالج araxis 14 300 15-11-16, 07:17 AM
آخر رد: araxis
  [سؤال] هل يمكن عرض عناصر الكومبوبوكس عن طريق الكود ؟؟؟؟؟؟؟؟؟؟؟؟ thevirus 1 112 10-11-16, 06:25 PM
آخر رد: أبو عمر
  عندى 2 داتا جريد فيو مروبوطين باكسس عن طريق المعالج araxis 1 71 25-10-16, 06:18 PM
آخر رد: WAEL ABED
Sad [سؤال] اريد صنع صفحة تسجيل دخول الي برنامج عن طريق داتابيس online sql sharo.azad 3 103 21-10-16, 04:07 AM
آخر رد: أبو عمر
  مشكلة في هذا الكود كيف الحل abumuhannadzym 3 95 18-10-16, 12:45 AM
آخر رد: abumuhannadzym
  [سؤال] مشكلة في الحفظ داخل قاعدة البيانات عن طريق Dataadaptor alrawi84 1 86 16-10-16, 11:02 PM
آخر رد: alrawi84
  البحث بين تاريخين عن طريق المعالج أسامة السالمي 9 278 14-10-16, 08:18 AM
آخر رد: ممدوح

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم