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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] استفسار بخصوص البحث في RichTextBox SerialPort dubai.eig 2 661 18-06-25, 11:09 AM
آخر رد: dubai.eig
  [سؤال] سؤال ترددت قبل نشرة:طابعة الباركود لماذا تطبع أكثر من ليبل فارغ قبل السليم dr.programming 1 511 20-04-25, 09:26 PM
آخر رد: Kamil
  ما الحل dwidar07@gmail.com 3 424 21-02-25, 01:08 AM
آخر رد: أبو خالد الشكري
  ارجو تعديل الكود جلب البيانات عن طريق اجراء مخزن - مرفق مثال new_programer 0 620 05-02-25, 01:51 AM
آخر رد: new_programer
  كيف يمكن اضافة عناصر للكومبوبوكس اثناء تشغيل البرنامج عن طريق المستخدم haithammoftah 3 2,160 30-09-24, 12:52 AM
آخر رد: asmarsou
  أريد تحديد صلاحيات المستخدمين عن طريق حقل في جدول قاعدة البيانات F.H.M 0 325 12-09-24, 06:29 PM
آخر رد: F.H.M
  كيفيه التعامل مع ملفات الدروب بوكس عن طريق api ackore 3 453 22-08-24, 06:13 AM
آخر رد: ackore
  فتح ملف اكسيل عن طريق الفيجوال بيسك 2015 Emam emam 0 276 19-07-24, 05:14 PM
آخر رد: Emam emam
  [سؤال] أرغب في شريط ضبط الخطوط في أداة RichTextBox والكود كما بالصورة Mostchar 1 382 02-04-24, 01:01 AM
آخر رد: justforit
  محتاج تشفير فيديو وتشغلية عن طريق البرنامج فقط new_programer 1 459 22-02-24, 12:09 PM
آخر رد: AHMED213

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


يقوم بقرائة الموضوع: