17 个解决方案
#1
帮顶好了!!
#2
网上查到的
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() + "}";
#3
有一段代码可以参考,但我不能理解,谁能解释一下也好
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 |= 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;
}
}
// 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复制进去的,我无法弄清楚这个表格的结构形式,如果手写该如何写,希望有高手能帮我读一下这两段代码做个解释,看看能不能在这个基础上山寨出我想要的东西
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 |= 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;
}
}
// 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复制进去的,我无法弄清楚这个表格的结构形式,如果手写该如何写,希望有高手能帮我读一下这两段代码做个解释,看看能不能在这个基础上山寨出我想要的东西
#4
没人帮我看一下吗?
#6
#7
看的我相当的头大,我在考虑是不是采用最笨的办法算了,用WEBBROWSER算了,发布一个软件还必须顺带发布一个网站,或者整合在本地浏览?
#8
WebBrowser仅仅是重量级比RichTextBox大些,你可以当它是超重版的RTB,跟网站没什么关系
#9
我把那段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() + "}";
}
#10
那该如何利用WebBrowser显示数据而不做网页呢?
#11
++
#12
用DocumentText属性
this.webBrowser1.DocumentText ="hello world <table border='1'><tr><td> my table </td></tr></table>";
#13
你这既是给我指了一条明路,也是给我出了一个大难题啊,以前在两边都调通了的那些鼠标反应啊什么的这回该怎么做啊,昨天睡觉前想了一会,最少你得告诉我一下,怎么解决单双引号问题吧,就是引号嵌套,要不根本没法解决啊
#14
其实12楼给我的方法最大的问题只是一个JS函数的问题了,就是JS带参数的时候怎么办?有没有做过这一类东西的,给个提示吧
比如上面他提到的,我可以写成这样:
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick='xianshi()'> my table </div></body>";
但xianshi()里面要是带参数的话我就没有办法了,单引号里面再要引号,怎么办?
比如上面他提到的,我可以写成这样:
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick='xianshi()'> my table </div></body>";
但xianshi()里面要是带参数的话我就没有办法了,单引号里面再要引号,怎么办?
#15
是不是不能用JS了,改用c#呢,如果可以那就更好了,毕竟在C#上花的时间多一点,js总是让人感觉很麻烦,只能做修修补补的工作。
我找了一下帮助,是不是这样写的呢
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick =<% =xianshi()%>> my table </div></body>";
摸索中
我找了一下帮助,是不是这样写的呢
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick =<% =xianshi()%>> my table </div></body>";
摸索中
#16
如果你已经有很多写好的代码不想改了,那就没办法了,只能照你原来的思路在RTB上进行扩展/修改。你可以找下HTML to RTF转换方面的资料,这样可以用html来做表格后转成rtf,会相对容易些。
引号嵌套有两种写法:
"some text \"xxxxx\" some text"
或者: @"some text ""xxxx"" some text"
你举的这个例子可以这样写:
string clickAction = @"xianshi(""字符串参数"")";
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick ='"+ clickAction +"'> my table </div></body>";
不要把aspx页面的东西拿到这里来用搞混了。
引号嵌套有两种写法:
"some text \"xxxxx\" some text"
或者: @"some text ""xxxx"" some text"
你举的这个例子可以这样写:
string clickAction = @"xianshi(""字符串参数"")";
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick ='"+ clickAction +"'> my table </div></body>";
不要把aspx页面的东西拿到这里来用搞混了。
#17
摸到点门路了,非常感谢jshi123 给予的帮助,希望你这个办法能帮我全部解决问题,如果有空希望还能帮帮我,太感谢你了。结贴,如果你愿意,我还有两帖子都是问的这个问题,你去在那里发个链接到这,300分全给你了。http://bbs.csdn.net/topics/390271092,http://bbs.csdn.net/topics/390171022
内嵌c#代码大致是这样做的,就是简单的字串连接,如果要加JS代码应该也是这个方法了,解决了引号问题就好办了,这个字串的添加只是一个量的问题
private void Form4_Load(object sender, EventArgs e)
{
webBrowser1.DocumentText = "<body style=\"padding: 3px; margin: 0px;\"><form runat=\"server\">hello world "+GetTime()+"<div style=\"border: blue 1px solid; padding:2px;\"> my table </div></form></body>";
}
protected String GetTime()
{
return DateTime.Now.ToString();
}
内嵌c#代码大致是这样做的,就是简单的字串连接,如果要加JS代码应该也是这个方法了,解决了引号问题就好办了,这个字串的添加只是一个量的问题
private void Form4_Load(object sender, EventArgs e)
{
webBrowser1.DocumentText = "<body style=\"padding: 3px; margin: 0px;\"><form runat=\"server\">hello world "+GetTime()+"<div style=\"border: blue 1px solid; padding:2px;\"> my table </div></form></body>";
}
protected String GetTime()
{
return DateTime.Now.ToString();
}
#1
帮顶好了!!
#2
网上查到的
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() + "}";
#3
有一段代码可以参考,但我不能理解,谁能解释一下也好
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 |= 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;
}
}
// 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复制进去的,我无法弄清楚这个表格的结构形式,如果手写该如何写,希望有高手能帮我读一下这两段代码做个解释,看看能不能在这个基础上山寨出我想要的东西
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 |= 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;
}
}
// 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复制进去的,我无法弄清楚这个表格的结构形式,如果手写该如何写,希望有高手能帮我读一下这两段代码做个解释,看看能不能在这个基础上山寨出我想要的东西
#4
没人帮我看一下吗?
#5
#6
#7
看的我相当的头大,我在考虑是不是采用最笨的办法算了,用WEBBROWSER算了,发布一个软件还必须顺带发布一个网站,或者整合在本地浏览?
#8
WebBrowser仅仅是重量级比RichTextBox大些,你可以当它是超重版的RTB,跟网站没什么关系
#9
我把那段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() + "}";
}
#10
那该如何利用WebBrowser显示数据而不做网页呢?
#11
++
#12
用DocumentText属性
this.webBrowser1.DocumentText ="hello world <table border='1'><tr><td> my table </td></tr></table>";
#13
你这既是给我指了一条明路,也是给我出了一个大难题啊,以前在两边都调通了的那些鼠标反应啊什么的这回该怎么做啊,昨天睡觉前想了一会,最少你得告诉我一下,怎么解决单双引号问题吧,就是引号嵌套,要不根本没法解决啊
#14
其实12楼给我的方法最大的问题只是一个JS函数的问题了,就是JS带参数的时候怎么办?有没有做过这一类东西的,给个提示吧
比如上面他提到的,我可以写成这样:
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick='xianshi()'> my table </div></body>";
但xianshi()里面要是带参数的话我就没有办法了,单引号里面再要引号,怎么办?
比如上面他提到的,我可以写成这样:
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick='xianshi()'> my table </div></body>";
但xianshi()里面要是带参数的话我就没有办法了,单引号里面再要引号,怎么办?
#15
是不是不能用JS了,改用c#呢,如果可以那就更好了,毕竟在C#上花的时间多一点,js总是让人感觉很麻烦,只能做修修补补的工作。
我找了一下帮助,是不是这样写的呢
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick =<% =xianshi()%>> my table </div></body>";
摸索中
我找了一下帮助,是不是这样写的呢
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick =<% =xianshi()%>> my table </div></body>";
摸索中
#16
如果你已经有很多写好的代码不想改了,那就没办法了,只能照你原来的思路在RTB上进行扩展/修改。你可以找下HTML to RTF转换方面的资料,这样可以用html来做表格后转成rtf,会相对容易些。
引号嵌套有两种写法:
"some text \"xxxxx\" some text"
或者: @"some text ""xxxx"" some text"
你举的这个例子可以这样写:
string clickAction = @"xianshi(""字符串参数"")";
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick ='"+ clickAction +"'> my table </div></body>";
不要把aspx页面的东西拿到这里来用搞混了。
引号嵌套有两种写法:
"some text \"xxxxx\" some text"
或者: @"some text ""xxxx"" some text"
你举的这个例子可以这样写:
string clickAction = @"xianshi(""字符串参数"")";
webBrowser1.DocumentText = “<body style='padding: 3px; margin: 0px;'>hello world <div style='border: blue 1px solid; padding:2px' onclick ='"+ clickAction +"'> my table </div></body>";
不要把aspx页面的东西拿到这里来用搞混了。
#17
摸到点门路了,非常感谢jshi123 给予的帮助,希望你这个办法能帮我全部解决问题,如果有空希望还能帮帮我,太感谢你了。结贴,如果你愿意,我还有两帖子都是问的这个问题,你去在那里发个链接到这,300分全给你了。http://bbs.csdn.net/topics/390271092,http://bbs.csdn.net/topics/390171022
内嵌c#代码大致是这样做的,就是简单的字串连接,如果要加JS代码应该也是这个方法了,解决了引号问题就好办了,这个字串的添加只是一个量的问题
private void Form4_Load(object sender, EventArgs e)
{
webBrowser1.DocumentText = "<body style=\"padding: 3px; margin: 0px;\"><form runat=\"server\">hello world "+GetTime()+"<div style=\"border: blue 1px solid; padding:2px;\"> my table </div></form></body>";
}
protected String GetTime()
{
return DateTime.Now.ToString();
}
内嵌c#代码大致是这样做的,就是简单的字串连接,如果要加JS代码应该也是这个方法了,解决了引号问题就好办了,这个字串的添加只是一个量的问题
private void Form4_Load(object sender, EventArgs e)
{
webBrowser1.DocumentText = "<body style=\"padding: 3px; margin: 0px;\"><form runat=\"server\">hello world "+GetTime()+"<div style=\"border: blue 1px solid; padding:2px;\"> my table </div></form></body>";
}
protected String GetTime()
{
return DateTime.Now.ToString();
}