● 寻求在 RichTextBox 中绘制表格的最佳解决方案 ●

奋斗一生的程序员 2005-02-26 09:26:21
问题一:因工作需要我想在RichText中绘制表格,以代替复杂的word对象。
我曾使用中文的制表符,但这样显示/打印效果不好而且比较麻烦。
有人建议使用RichEdit 3.0,但是在中文系统中可能有些问题。
也有人建议采用更好的控件,如TX Text Control(http://www.textcontrol.com/),但这个需要收费注册。
不知哪位前辈有更好的解决方案?谢谢 ^_^

问题二:我点击窗体中的一个按钮,如何在RichTextBox中光标所在处键入文字?而不是在RichTextBox结尾处键入文字(要是结尾处,则语句是RichTextBox.text=RichTextBox+"文字")。
谢谢 ^_^
...全文
1278 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
forpromise 2005-07-21
  • 打赏
  • 举报
回复
Mark
  • 打赏
  • 举报
回复
不知道此贴能否加入FAQ?
shiyunlong 2005-04-15
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
此贴从发贴到如今,整整一个月了。
感谢各位献言献策,该结贴了。
wumylove1234 2005-03-25
  • 打赏
  • 举报
回复
顶.
  • 打赏
  • 举报
回复
下面是我利用制表符在RichTextBox中利用实现画Table(m行n列)的功能
[在一个窗体上放置一个Command1、一个RichTextBox和两个ComBoBox控件,有兴趣的可以扩展一下]

Option Explicit
Public iTabRows As Integer '表格行数
Public iTabCols As Integer '表格列数
Const TabNum = 27 '每行制表符数


Private Sub Form_Load()

Dim iH As Integer
For iH = 1 To 20
cmbHangShu.AddItem iH
Next
cmbHangShu = 1
Dim iL As Integer
For iL = 1 To 10
cmbLieShu.AddItem iL
Next
cmbLieShu = 1
End Sub

Private Sub cmdOK_Click()

iTabRows = CInt(cmbHangShu)
iTabCols = CInt(cmbLieShu)

Dim iR As Integer
Dim iC As Integer
Dim sT As String '制表符
Dim iTabCol As Integer '每列制表符数(─)
iTabCol = Int((TabNum - iTabCols - 1) / iTabCols)

If iTabRows = 1 Then '1行表格
sT = "┌" & sTabSymbol("─", iTabCol) & sTabSymbol("┬" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┐" & Chr(10)
sT = sT & "│" & sTabSymbol(" ", iTabCol) & sTabSymbol("│" & sTabSymbol(" ", iTabCol), iTabCols - 1) & "│" & Chr(10)
sT = sT & "└" & sTabSymbol("─", iTabCol) & sTabSymbol("┴" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┘" & Chr(10)

Else '2行(含2)以上的表格

For iR = 1 To iTabRows
If iR = 1 Then '第一行
sT = "┌" & sTabSymbol("─", iTabCol) & sTabSymbol("┬" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┐" & Chr(10)
sT = sT & "│" & sTabSymbol(" ", iTabCol) & sTabSymbol("│" & sTabSymbol(" ", iTabCol), iTabCols - 1) & "│" & Chr(10)

sT = sT & "├" & sTabSymbol("─", iTabCol) & sTabSymbol("┼" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┤" & Chr(10)
sT = sT & "│" & sTabSymbol(" ", iTabCol) & sTabSymbol("│" & sTabSymbol(" ", iTabCol), iTabCols - 1) & "│" & Chr(10)
ElseIf iR = iTabRows Then
sT = sT & "├" & sTabSymbol("─", iTabCol) & sTabSymbol("┼" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┤" & Chr(10)
sT = sT & "│" & sTabSymbol(" ", iTabCol) & sTabSymbol("│" & sTabSymbol(" ", iTabCol), iTabCols - 1) & "│" & Chr(10)
sT = sT & "└" & sTabSymbol("─", iTabCol) & sTabSymbol("┴" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┘" & Chr(10)
Else
sT = sT & "├" & sTabSymbol("─", iTabCol) & sTabSymbol("┼" & sTabSymbol("─", iTabCol), iTabCols - 1) & "┤" & Chr(10)
sT = sT & "│" & sTabSymbol(" ", iTabCol) & sTabSymbol("│" & sTabSymbol(" ", iTabCol), iTabCols - 1) & "│" & Chr(10)
End If
Next
End If


RichTextBox1.SelText = sT
RichTextBox1.SetFocus

End Sub

'画一定个数的制表符
Private Function sTabSymbol(sTab As String, iNum As Integer)
Dim i As Integer
Dim s As String
For i = 1 To iNum
s = s & sTab
Next
sTabSymbol = s
End Function

运行效果

1行2列
┌────────────┬────────────┐
│ │ │
└────────────┴────────────┘
2行3列
┌───────┬───────┬───────┐
│ │ │ │
├───────┼───────┼───────┤
│ │ │ │
├───────┼───────┼───────┤
│ │ │ │
└───────┴───────┴───────┘
  • 打赏
  • 举报
回复
XLYT(雨田)
楼主的意图究竟是什么?
为什么要用RichTexbBox?
要在窗体中显示表格,用Grid不可以吗?Hierarchical FlexGrid允许合并单元格,好象也可以插入图片。
==================================
此表格非Gird,而是类似Word中的Table。
happywqw 2005-03-18
  • 打赏
  • 举报
回复
RichTextBox中放入的OLE对象一般都是双击才能激活的!
XLYT 2005-03-17
  • 打赏
  • 举报
回复
楼主实际上是想实现一个类似于WORD的编辑器?但还要把编辑器里的内容保存到数据库?
richtextbox支持对象的嵌入,可以在里面放图片、WORD、EXCEL……
  • 打赏
  • 举报
回复
感谢楼上的(同病相怜)
不过“至于页眉、页脚、分页、OLE、绘图对象等其他功能也基本是零!”这个功能我不需要。
我只关心“无法解决表格垂直合并的情况”。
呵呵,我也希望大家能给个写实现此功能的控件的思路(当然本人会写控件)。
happywqw 2005-03-16
  • 打赏
  • 举报
回复
这个问题我也正在试图解决:
http://community.csdn.net/Expert/topic/3848/3848253.xml?temp=.9818537

可惜目前为止还没人能够提出较好的解决方案!
至于TX Text控件目前网络上有10.1的破解版本;
而vbAccelerator RichTextBox有源码,如果你是VB高手,自己添加新功能吧!反正我目前还没看懂!
RichTextBox3.0在VB中不能使用,不如不说!
总的来说,除了Word,其他任何控件都无法解决表格垂直合并的情况!至于页眉、页脚、分页、OLE、绘图对象等其他功能也基本是零!

如果要彻底解决,我看只有自己写控件了!如何写呢?请大家提供思路吧!!!

这里有国内做得最好的(除了WPS)控件,大家可以看看:
http://www.eduoffice.com.cn/home/product1.html
  • 打赏
  • 举报
回复
不明白楼上的意思,能否详细说一下Excel的方案?
不要告诉我,像调用Word那样调用Excel,然后编辑保存。
请指教。
happywqw 2005-03-16
  • 打赏
  • 举报
回复
to XLYT(雨田) :

在窗体中显示表格当然好解决,但是如果是作为一个编辑器提供给用户,他肯定会期望和Word一样的输入界面。不可能让表格遮住文本,或者让用户点击一下什么按钮才弹出一个表格吧!这就是图文混排的好处!
XLYT 2005-03-16
  • 打赏
  • 举报
回复
楼主的意图究竟是什么?
为什么要用RichTexbBox?
要在窗体中显示表格,用Grid不可以吗?Hierarchical FlexGrid允许合并单元格,好象也可以插入图片。
happywqw 2005-03-16
  • 打赏
  • 举报
回复
我在想,是否可以这样:将RichTextBox控件或者DHTMLEdit控件封装到自定义控件中,然后让某个表格控件浮在它的上面,这样看起来就好像是在控件中插入表格了!你可能会问:如何解决表格文字环绕的问题呢?我想是否可以在RichTextBox中插入一个空白图片,其位置与表格控件位置相同即可!关键是插入后如何获取这个图片在屏幕上(或者是自定义控件内部)的坐标?

以上是一点个人看法,看看是否可以实现!我也正在试图解决啊!
XLYT 2005-03-15
  • 打赏
  • 举报
回复
excel不可以吗?
  • 打赏
  • 举报
回复
近日结贴,我已经采用制表符的方案。
用户可以手工画,也可以通过程序自动画m行n列的Table,不难实现。
问题是用户是否能接受这种断线的Table。
DreamManor 2005-03-11
  • 打赏
  • 举报
回复
最好的办法是在PictureBox而不是RichTextBox中绘制表格或其它控件
  • 打赏
  • 举报
回复
楼上的,我是直接保存RichTextBox1.Text,保存到数据库中的数据类型也是Text类型。
读写数据非常方便快捷。
这也是我不用Word对象的原因。
  • 打赏
  • 举报
回复
加载更多回复(20)

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧