تقييم الموضوع :
  • 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
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] أرغب في شريط ضبط الخطوط في أداة RichTextBox والكود كما بالصورة Mostchar 1 130 02-04-24, 01:01 AM
آخر رد: justforit
  محتاج تشفير فيديو وتشغلية عن طريق البرنامج فقط new_programer 1 118 22-02-24, 12:09 PM
آخر رد: AHMED213
  التحقق من خلال محتوى خلية عن طريق textbox صالح عبدالله 2 224 24-01-24, 12:54 PM
آخر رد: صالح عبدالله
  ماهي طريقة نقل محتويات checkedlistbox الى داتاقريدفيو صالح عبدالله 3 266 06-01-24, 03:20 PM
آخر رد: Kamil
  [سؤال] توزيع الارقام على أكثر من تكست بوكس أبووسم 11 728 17-11-23, 12:04 AM
آخر رد: أبووسم
  تشغيل الماكرو عن طريق اكواد الفجوال نيمو 0 271 03-11-23, 11:14 AM
آخر رد: نيمو
Rainbow [سؤال] إضافة شريط ضبط الكتابة في أداة RichTextBox أبو خالد الشكري 0 230 29-10-23, 08:19 AM
آخر رد: أبو خالد الشكري
  كيف أقوم بنقل محتويات checkedListbox إلى Textbox ؟ صالح عبدالله 4 535 16-09-23, 10:51 AM
آخر رد: أبو خالد الشكري
  البرنامج لدي يعمل على ويندوز 11 والان لا يعمل على ويندوز 10 ماهو الحل moh61 1 300 01-09-23, 04:38 AM
آخر رد: اسامه الهرماوي
  اريد ارسال pdf عبر واتساب عن طريق ال API محتاج تعديل على الكود moh61 0 537 03-08-23, 03:41 PM
آخر رد: moh61

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


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