richTextBox插入表格

附件:http://files.cnblogs.com/xe2011/richTextBox_InsertTable.rar

插入表格

       /// <summary>
        /// 插入表格
        /// </summary>
        /// <param name="richTextBox"></param>
        /// <param name="col"></param>
        /// <param name="row"></param>
        /// <param name="AutoSize">=TRUE:自动设置每个单元格的大小</param>
        private void InsertTable(RichTextBox richTextBox,int col, int row,bool AutoSize)
        {
            StringBuilder rtf = new StringBuilder();
            rtf.Append(@"{
tf1 ");

            //int cellWidth = 1000;//col.1 width =1000
            int cellWidth = 1000; 

            if (AutoSize)
                //滚动条出现时 (richTextBox.ClientSize.Width - 滚动条的宽 /列的个数)*15
                cellWidth = (richTextBox.ClientSize.Width / row) * 15; //15 当ROW值越大 结果差距越大 
 
            Text =  cellWidth.ToString() ;
            for (int i = 0; i < col; i++)
            {
                rtf.Append(@"	rowd");
                for (int j = 1; j <= row; j++)
                    rtf.Append(@"cellx" + (j * cellWidth).ToString());
                rtf.Append(@"intbl cell 
ow"); //create row
            }
            rtf.Append(@"pard");
            rtf.Append(@"}");
            richTextBox.SelectedRtf = rtf.ToString();
        }

扩展的richTextBox

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

namespace richTextBoxTableClass
{
    public class CustomRichTextBox : RichTextBox
    {

///支持表格正确粘贴
        // P/Invoke declarations
        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern IntPtr LoadLibrary(string path);

        private static IntPtr moduleHandle;

        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");
                    }
                }

                CreateParams createParams = base.CreateParams;
                createParams.ClassName = "RichEdit50W";
                if (this.Multiline)
                {
                    if (((this.ScrollBars & RichTextBoxScrollBars.Horizontal) != RichTextBoxScrollBars.None) &&!base.WordWrap)      
                    {
                        createParams.Style |= 0x100000;
                        if ((this.ScrollBars & ((RichTextBoxScrollBars)0x10)) != RichTextBoxScrollBars.None)
                        {
                            createParams.Style |= 0x2000;
                        }
                    }
                    if ((this.ScrollBars & RichTextBoxScrollBars.Vertical) != RichTextBoxScrollBars.None)
                    {
                        createParams.Style |= 0x200000;
                        if ((this.ScrollBars & ((RichTextBoxScrollBars)0x10)) != RichTextBoxScrollBars.None)
                        {
                            createParams.Style |= 0x2000;
                        }
                    }
                }
                if ((BorderStyle.FixedSingle == base.BorderStyle) && ((createParams.Style & 0x800000) != 0))
                {
                    createParams.Style &= -8388609;
                    createParams.ExStyle |= 0x200;
                }
                return createParams;
            }
        }


    }
}
CustomRichTextBox.CS

调用

        private void button1_Click(object sender, EventArgs e)
        {
                InsertTable(richTextBox1, 5, 4, false);
                InsertTable(richTextBox51,5, 4, false);
        }
View Code
原文地址:https://www.cnblogs.com/xe2011/p/3455737.html