كيفية التأكيد بشكل انتقائي السلاسل في RichTextBox؟

StackOverflow https://stackoverflow.com/questions/821347

  •  03-07-2019
  •  | 
  •  

سؤال

في برنامجي بعد النقر على زر - اختيار مداخل ListView يجب نسخ إلى RichTextBox. ListView يحتوي على معلومات الاتصال، وتأثير أريد أن إنجاز مشابه لتلك الموجودة في Oultook (عند اختيار الأسماء من كتاب الاتصال). جزء من قانون بلدي يخدم هذا الغرض يشبه ما يلي:

    private void toButton_Click(object sender, EventArgs e)
    {
        int start = 0;
        for (int i = 0; i < contactsListView.SelectedItems.Count; i++)
        {
            if (contactsTextBox.TextLength != 0) contactsTextBox.Text += "; ";
            start = contactsTextBox.TextLength;
            contactsTextBox.Text += contactsListView.SelectedItems[i].Text + " " + contactsListView.SelectedItems[i].SubItems[1].Text + " [" + contactsListView.SelectedItems[i].SubItems[2].Text + "]";
            contactsTextBox.Select(start, contactsTextBox.TextLength);       
            contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Underline);
            contactsTextBox.DeselectAll();
            contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Regular);
        }
    }

ومما يؤسف له بطريقة أو بأخرى يورث FontStyle من النص بأكمله وكل ما يمكنني الدخول بعد دخول من ListView وأكد أيضا.

وهكذا سؤالي هو: - كيفية تسطير النص معينة فقط (حيث كنت قد ارتكبت خطأ)

وهناك موضوع مماثل على ستاكوفيرفلوو هنا للأسف في حالتي ذكر الحل لن يكون هناك إهدار للموارد.

هل كانت مفيدة؟

المحلول

وجرب هذا بدلا من ذلك:

        int start = 0;
        for (int i = 0; i < contactsListView.SelectedItems.Count; i++)
        {
            if (contactsTextBox.TextLength != 0) contactsTextBox.Text += "; ";
            start = contactsTextBox.TextLength;
            contactsTextBox.Text += contactsListView.SelectedItems[i].Text +" " + contactsListView.SelectedItems[i].SubItems[1].Text + " [" + contactsListView.SelectedItems[i].SubItems[2].Text + "]";
        }


        this.contactsTextBox.Text += " ";
        this.contactsTextBox.SelectionStart = 0;
        this.contactsTextBox.SelectionLength = this.contactsTextBox.Text.Length-1;
        contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Underline);
        this.contactsTextBox.SelectionLength = 0;

ومجموع الإختراق، ولكن في الأساس، إذا قمت بتحديد النص بعد كل شيء هناك، ولكن لم تقم بتحديد ALL منه (والذي هو السبب في أنني إضافة المزيد "") ثم قم بتعيين نص الاختيار، وأنه يحتوي على التأثير المطلوب .

نصائح أخرى

والمشكلة مع التعليمات البرمجية هي أن SelectionFont هو فقط ذلك - خط التحديد. إذا لم يكن هناك اختيار، وتغيير الخط لن تفعل أي شيء. ويبدو أن الحل الذي عرضت BFree مثل ذلك ستعمل. هذا هو نفس الشيء الذي أود أن تفعل إذا كنت كتابة المستند في WORD - فما استقاموا لكم فاستقيموا إضافة بعض الأحرف بعد المقطع تحته قبل أن التأكيد على ذلك فإن الأحرف الزائدة "انقاذ" التنسيق الأصلي لحين واصلت وثيقة.

و+1 لBFree، ولكن ليس لدي سمعة بعد :( ...

وقبل إضافة المزيد من النص إلى نهاية مربع النص، ضع المؤشر في نهاية، وتعيين الخط إلى النمط المطلوب. ثم الدعوة إلى rtb.AppendLine () يجب تنتج النتائج المرجوة.

وانها المفتاح لنتذكر أن ينفذ تحكم RTB بنفس الطريقة التي يعامل بها أي معالج النصوص الأخرى. قمت بتعيين نمط والبدء في الكتابة. ثم أي شيء تكتبه بعد وضع هذا النمط سوف تأخذ على تلك الصفات التي هي تحت corsor.

تحديث: ويبدو أن هذا العمل تماما.

Dim tTexts() As String = {"Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me"}
    Dim tUnderline As Boolean = False
    Dim tIndex As Integer = 0

    With oRTB
        For tIndex = tTexts.GetLowerBound(0) To tTexts.GetUpperBound(0)
            If tUnderline Then
                .SelectionStart = .Text.Length
                .SelectionFont = New Font("Arial", 12, FontStyle.Underline)
            Else
                .SelectionStart = .Text.Length
                .SelectionFont = New Font("Arial", 12, FontStyle.Regular)
            End If
            .AppendText(tTexts(tIndex))
            tUnderline = Not tUnderline
        Next
    End With
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top