Windows.Forms.RichTextBox สูญเสียสีพื้นหลังของตาราง

เมื่อโหลดไฟล์ rtf ลงใน Windows Forms RichTextBox มันจะสูญเสียสีพื้นหลังของเซลล์ตาราง หากเราใช้ WPF RichTextBox และโหลดไฟล์เดียวกัน ทุกอย่างจะถูกจัดรูปแบบตามที่ควร

ฉันขาดอะไรบางอย่างไปเมื่อฉันโหลดไฟล์ลงใน Windows Forms RichTextBox หรือไม่

ข้อมูลโค้ด Windows Forms RichTextBox:

    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog fDialog = new System.Windows.Forms.OpenFileDialog();
        fDialog.Filter = "Rich Text Files (*.rtf)|*.rtf";
        fDialog.Multiselect = false;
        fDialog.RestoreDirectory = true;
        if (fDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            if (fDialog.FileName != "")
            {
                richTextBox1.LoadFile(fDialog.FileName, RichTextBoxStreamType.RichText );
            }
        }
    }

ในข้อมูลโค้ดข้างต้นฉันได้ลองใช้แล้ว

richTextBox1.Rtf = File.ReadAllText(fDialog.FileName);

และ

richTextBox1.LoadFile(fDialog.FileName);

ข้อมูลโค้ด WPF RichTextBox

    private void load_file_Click(object sender, RoutedEventArgs e)
    {
        System.Windows.Forms.OpenFileDialog fDialog = new System.Windows.Forms.OpenFileDialog();
        fDialog.Filter = "Rich Text Files (*.rtf)|*.rtf";
        fDialog.Multiselect = false;
        fDialog.RestoreDirectory = true;
        if (fDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            if (fDialog.FileName != "")
            {
                FileStream fStream;
                fStream = new FileStream(fDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.Read);

                richtextbox1.SelectAll();
                richtextbox1.Selection.Load(fStream, DataFormats.Rtf);
                fStream.Close();
            }
        }

    }

นี่คือภาพหน้าจอจากทั้งสองเวอร์ชัน : ป้อนคำอธิบายรูปภาพที่นี่

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือใด ๆ

สตีฟ.


person SteveP    schedule 18.12.2015    source แหล่งที่มา
comment
ขอบคุณสำหรับความคิดเห็น ตัวอย่างข้อมูลนำมาจากโครงการทดสอบด่วนที่ฉันสร้างขึ้น เพื่อให้เราสามารถแก้ไขปัญหาในโครงการที่ใหญ่กว่ามาก ซึ่งเราใช้การใช้คำสั่งต่างๆ   -  person SteveP    schedule 18.12.2015


คำตอบ (1)


RichTextBox, Winforms มีหลายเวอร์ชันที่ถูกล็อคไว้ในเวอร์ชันก่อนหน้า เวอร์ชัน 2.0 กลับไปใช้ .NET 1.x และ .NET 2.0 เวอร์ชันที่ยังสามารถทำงานบน Windows เวอร์ชันเก่า เช่น 98 ได้ ยังขาดการรองรับตารางในเวอร์ชัน 2.0

ซึ่งสามารถแก้ไขได้อย่างเห็นได้ชัด โดยไม่จำเป็นต้องใช้โค้ดมากนักในการอัพเกรดเวอร์ชัน เวอร์ชัน 5.0 พร้อมใช้งานบน XP ขึ้นไป สิ่งที่คุณต้องทำคือโหลด DLL ดั้งเดิม msftedit.dll แทน riched20.dll เพื่อให้คลาสหน้าต่าง "RichEdit50W" พร้อมใช้งาน และแทนที่ CreateParams เพื่อใช้คลาสนั้น

เพิ่มคลาสใหม่ในโครงการของคุณและวางโค้ดที่แสดงด้านล่าง รวบรวม. คุณสามารถปล่อยตัวควบคุมใหม่ได้จากด้านบนของกล่องเครื่องมือ โดยแทนที่อันเก่า

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class RichTextBox5 : RichTextBox {
    protected override CreateParams CreateParams {
        get {
            if (moduleHandle == IntPtr.Zero) {
                moduleHandle = LoadLibrary("msftedit.dll");
                if ((long)moduleHandle < 0x20) throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not load Msftedit.dll");
            }
            var cp = base.CreateParams;
            cp.ClassName = "RichEdit50W";
            return cp;
        }
    }
    private static IntPtr moduleHandle;

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr LoadLibrary(string lpFileName);
}

ตารางตัวอย่างที่ฉันสร้างด้วย Word แสดงผลได้อย่างสมบูรณ์แบบ:

ป้อนคำอธิบายรูปภาพที่นี่


อัปเดต: รหัสนี้ สร้างขึ้นแล้ว -ในไปยัง Winforms กำหนดเป้าหมายอย่างน้อยเวอร์ชัน 4.7 เพื่อใช้ประโยชน์จากมัน

person Hans Passant    schedule 18.12.2015
comment
สวัสดีฮันส์ ขอบคุณมากสำหรับคำตอบของคุณ มันทำงานได้อย่างสมบูรณ์แบบ - person SteveP; 18.12.2015
comment
ฉันพบปัญหาการวางรูปภาพจาก Word/Excel/.. บน Windows 10 ปรากฏเป็นภาพสีขาว ฉันลองสิ่งนี้ดูเหมือนว่าจะทำงานได้ดี ขอบคุณ - person okud; 25.06.2019
comment
ดังนั้นในบางครั้งบางคนใน Microsoft ยังคงอัปเดต WinForms WinForms ตายแล้ว WinForms มีอายุยืนยาว! - person LarsTech; 27.06.2019
comment
ขอบคุณมากสำหรับการแก้ปัญหานี้ มันใช้งานได้ดีและยังแก้ปัญหาภาพ jpeg และ png ที่หายไป (เช่น \pict\jpegblip) - person WarpEnterprises; 28.07.2020