首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

winform怎么动态在richtextbox里面添加表格

2012-12-18 
winform如何动态在richtextbox里面添加表格我希望在richtextbox里面动态添加表格,然后在表格内插入文本内

winform如何动态在richtextbox里面添加表格
我希望在richtextbox里面动态添加表格,然后在表格内插入文本内容,我该如何做到
[最优解释]
 (<cell>+ <tbldef> /row),
[其他解释]

引用:
引用:
rtf格式是有标准的,网上有很多资料。参考rtf文件、RTF文件格式研究报告
……
看的我相当的头大,我在考虑是不是采用最笨的办法算了,用WEBBROWSER算了,发布一个软件还必须顺带发布一个网站,或者整合在本地浏览?

我把那段RTF简化了一下,发现最简单的加框的代码应该是这样的了
 StringBuilder st = new StringBuilder();
        private void button1_Click(object sender, EventArgs e)
        {
            st.Append(@"\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}");
            st.Append(@"{\trowd\brdrs \cellx2000\pard\intbl\kerning2\f0\fs21\cell\row}");
            richTextBox1.Rtf = "{" + st.ToString() + "}";
        }
[其他解释]
= 0x2000;
                        }
                    }
                    if ((this.ScrollBars & RichTextBoxScrollBars.Vertical) != RichTextBoxScrollBars.None)
                    {
                        createParams.Style 
[其他解释]
= 0x200;
                }
                return createParams;
            }
        }

        // P/Invoke declarations
        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern IntPtr LoadLibrary(string path);
    }
这段代码编译后作为控件应用,可以将RTF的表格复制到RICHTEXTBOX里面

另有一段代码应该也可以参考,我同样无法理解
StringBuilder st = new StringBuilder();
        private void button1_Click(object sender, EventArgs e)
        {
            st.Append(@"\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}{\colortbl ;\red0\green0\blue0;}\viewkind4\uc1\trowd\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx1596\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx3300\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx5004\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx6709\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx8414\pard\intbl\ltrpar\kerning2\f0\fs21\cell\cell\cell\cell\cell\row\intbl\cell\cell\cell\cell\cell\row\intbl\cell\cell\cell\cell\cell\row\intbl\cell\cell\cell\cell\cell\row\pard\ltrpar\lang2052\kerning0\f1\fs18\par");


            st.Append(@"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\trowd\trgaph108\trleft180\trrh313\trbrdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3
\clbrdrl\brdrw10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx1082\pard\intbl\nowidctlpar\qj\kerning2\f0\fs21\cell\row\pard\lang2052\kerning0\f1\fs18\par
}");
            richTextBox1.Rtf = "{" + st.ToString() + "}";
        }
后面那一段是我直接读出单个框的RTF复制进去的,我无法弄清楚这个表格的结构形式,如果手写该如何写,希望有高手能帮我读一下这两段代码做个解释,看看能不能在这个基础上山寨出我想要的东西
[其他解释]
网上查到的


            StringBuilder st = new StringBuilder();
            st.Append(@"\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\trowd\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx1596\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx3300\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx5004\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx6709\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx8414\pard\intbl\ltrpar\kerning2\f0\fs21\cell\cell\cell\cell\cell\row
\intbl\cell\cell\cell\cell\cell\row
\intbl\cell\cell\cell\cell\cell\row
\intbl\cell\cell\cell\cell\cell\row
\pard\ltrpar\lang2052\kerning0\f1\fs18\par
");
            richTextBox1.Rtf = "{" + st.ToString() + "}";

[其他解释]
帮顶好了!!
[其他解释]
 (<tbldef> <cell>+ /row) 
[其他解释]
有一段代码可以参考,但我不能理解,谁能解释一下也好
    public partial class RichTextBox5 : RichTextBox
    {
        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 
[其他解释]
= 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 
[其他解释]
没人帮我看一下吗?
[其他解释]
rtf格式是有标准的,网上有很多资料。参考rtf文件、RTF文件格式研究报告

引用
表行从控制字/trowd开始,/row结束。包含在一个表行中的每个段落必须指定/intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(/cell控制字)结束,行由行标志(/row控制字)结束。表行也可以被绝对定位。此时,表行的每个段落必须具有相同的定位控制字。表的属性可以从前一行继承;因此,连续的表行可以通过单一的<tbldef>来定义。
RTF1.7规范中规定,表行的格式如下:(<tbldef> <cell>+ <tbldef> /row) 
[其他解释]
该回复于2012-11-21 15:56:50被管理员删除
[其他解释]
引用:
rtf格式是有标准的,网上有很多资料。参考rtf文件、RTF文件格式研究报告
……

看的我相当的头大,我在考虑是不是采用最笨的办法算了,用WEBBROWSER算了,发布一个软件还必须顺带发布一个网站,或者整合在本地浏览?
[其他解释]
WebBrowser仅仅是重量级比RichTextBox大些,你可以当它是超重版的RTB,跟网站没什么关系
[其他解释]
引用:
WebBrowser仅仅是重量级比RichTextBox大些,你可以当它是超重版的RTB,跟网站没什么关系

那该如何利用WebBrowser显示数据而不做网页呢?

热点排行