VB中的打印问题·····

我想产生两个4×4的矩阵,并把它们同时(一个在左边,一个在右边)打印在窗体上,可是按照下面这个代码打印出来的不是我想要的结果,有谁能告诉我为什么它每打印一列就自动换行么?... 我想产生两个4×4的矩阵,并把它们同时(一个在左边,一个在右边)打印在窗体上,可是按照下面这个代码打印出来的不是我想要的结果,有谁能告诉我为什么它每打印一列就自动换行么?
Option Explicit
Option Base 1

Private Sub Form_Load()
Dim a(4, 4) As Integer, b(4, 4) As Integer
Dim i As Integer, j As Integer, k As Integer, h As Integer
For i = 1 To 4
For j = 1 To 4
Randomize
a(i, j) = Int(Rnd * 41 + 30)
Randomize
b(i, j) = Int(Rnd * 35 + 101)
Next j
Next i

For i = 1 To 4
For j = 1 To 4
Print Tab(20 + 5 * j); a(i, j); Tab(50 + 5 * j); b(i, j);
Next j
Print
Next i
End Sub
展开
 我来答
储鸣澹台弘深
2019-06-24 · TA获得超过3639个赞
知道大有可为答主
回答量:3115
采纳率:25%
帮助的人:226万
展开全部
VB提供了多个网格控件,如DBGrid,FlexGrid等,在程序中可以用来显示、录入数据,而且可以直接显示数据库里的数据,但是这些网格控件没有提供打印功能,用这些网格控件只能在屏幕上显示表格数据,这是网格控件功能上的一个缺憾。
如何才能把网格控件显示的表格数据从屏幕上搬到打印机上呢?使用VB
6.0提供的报表生成器,就能实现数据报表的生成和打印。本文将介绍打印数据报表的几个技巧。
数据报表设计器
Microsoft数据报表设计器(Microsoft
Data
Report
designer)是一个多功能的报表生成器,其特色是创建联合分层结构报表。同数据源(Data
Environment
designer数据环境设计器)一起使用,可以从几个不同的相关表创建报表。除创建可打印报表之外,还可以将报表导出到
HTML
或文本格式文件中。
采用如下方法调用数据报表设计器,单击[工程]→[添加
Data
Report],向工程中添加一个数据报表设计器,在一个工程中可以添加多个数据报表设计器,用于设计多个报表。如果“添加
Data
Report”没有在“工程”菜单上列出,则单击[部件],出现“部件”对话框,单击“设计器”选项卡。并单击[Data
Report]把设计器添加到菜单上。
在“工程”菜单上只列出四种ActiveX设计器,其余的设计器放在“工程”菜单的“更多
ActiveX
设计器”子菜单中。
有关上述控件的使用方法请参阅VB的联机帮助。
实现数据报表打印
我们摸索出了几个VB的联机帮助中没有介绍的技巧,但是在编程中非常实用,供大家参考。
(一)数据源动态选择数据库文件
我们为数据环境设计器(Data
Environment
designer)的“Connection1”设置相关数据库时,把数据源定在了一个数据库文件上,这样就不能实现一个数据报表设计器动态选择相关数据库。以下代码的加入将实现数据源的动态选择。实现过程如下:
进入DataEnvironment1的代码窗口。在DataEnvironment1的Initialize()事件中加入代码:
Private
Sub
DataEnvironment_Initialize()
′建立数据源
Dim
sjklj
As
String
sjklj
=
App.Path
+
〃\〃
+〃
Biblio.mdb〃
′变量sjklj将存放数据库文件“Biblio.mdb”
的路径
sjklj=〃Provider=Microsoft.Jet.OLE
DB.3.51;
-
Persist
Security
Info=False;Data
Source=〃+sjklj
′设置相关数据源
DataEnvironment1.Connection1.ConnectionString
=sjklj
End
Sub
这样我们就可以使用代码在程序中随时为数据环境设置数据源了。
(二)如何卸载数据源
使用上述方法设置数据库,如果再修改为另一个数据库,程序依然调用第一次设置的数据库,这是为什么呢?
关于这个问题的解决方法在VB的联机帮助中没有介绍。经过细心研究我们考虑出了一种解决方法:我们需要先将原来的数据源卸载,再使数据环境设计器与修改后的数据库相关。对于卸载一个控件,VB提供了Unload方法,对于数据环境设计器这种方法同样适用。我们只需在实现显示数据报表的事件过程中的Show语句前加入:Unload
DataEnvironment1即可。
(三)实现对报表打印边距的编辑
数据报表设计器提供给编程者编辑打印报表边距的功能。DataReport有两个属性:
1.LeftMargin属性:编辑打印报表的左边距;
2.TopMargin属性:编辑打印报表的上边距。
同样在Show语句前加入以下代码便可实现对报表的左边距和上边距进行编辑了:
lm
=
InputBox(〃请输入打印左边距(mm)〃,
〃打印
-左边距〃,
〃25〃)
tm
=
InputBox(〃请输入打印上边距(mm)〃,
〃打印
-上边距〃,
〃25〃)
DataReport1.LeftMargin
=
lm
*
56.7
DataReport1.TopMargin
=
tm
*
56.7
运行程序,单击[打印]按钮时,窗口上将出现一消息框,提示你输入边距数值,单位是毫米,如果用户不输入则程序默认边距为25mm。
bdrobot
2008-10-18 · TA获得超过164个赞
知道答主
回答量:150
采纳率:0%
帮助的人:0
展开全部
打印机本身问题。
参考 http://zhidao.baidu.com/question/43772828.html?si=9

msdn中的是标准答案,让我写也没法写的更好了。

PrintForm方法

本示例使用PrintForm方法打印当前窗体。

Private Sub Form_Click()
Dim Msg
On Error GoTo ErrorHandler
Print Form '打印窗体
Exit Sub
ErrorHandler:
Msg = "The form can't be printed."
MsgBox Msg
Resume Next
End Sub
参考 http://zhidao.baidu.com/question/3849801.html?si=8

直接用Printer控件即可

Set Printer = Printers(0) '设定打印机
Printer.ScaleMode = vbMillimeters '设定单位毫米

Printer.fontname = "宋体" '设定字体
Printer.Fontsize = 10
Printer.FontBold = False
Printer.FontItalic = False

Printer.Line (10, 10)-Step(1, 1) '划线从坐标10,10到11,11

Printer.CurrentX = 10 '设定文字的左边距
Printer.CurrentY = 10 '设定文字的上边距
Printer.Print "文字" '输出文字,输出后别忘了重新设定边距

Printer.NewPage '新建一页

Printer.EndDoc '打印机输出

Printer控件属性也不是太多,花点时间研究一下,肯定能满足你的需求的。
参考 http://zhidao.baidu.com/question/60999286.html?si=7

Printer.Height=10*567
Printer.Width=5*567
Printer.ScaleWidth = 210
Printer.ScaleHeight = 297
Printer.ScaleMode = 6 '设置打印的单位
Printer.PaperSize = vbPRPSA4 '定义纸张大小为A4
Printer.FontSize = 11
'如何用printer设置打印方向为横向打印
---------------------------------------------------------------

Printer.Orientation=VbPRORPortrait'纵向打印
Printer.Orientation=VbPRORLandscape'横向打印

---------------------------------------------------------------

Printer.Orientation = VbPRORLandscape
---------------------------------------------------------------

Printer.Orientation = 2

'设置打印页边距
'你可以使用打印机的Scale属性来设置打印页边距。下面的代码设置左边距为1/2英寸。右边距为3/4英寸。乘以1440是将英尺转换成twips。

Printer.ScaleLeft = -0.75 * 1440
Printer.ScaleTop = -0.5 * 1440
Printer.CurrentX = 0
Printer.CurrentY = 0
缇是一个与屏幕无关的单位,用来保证屏幕应用程序对屏幕元素的定位和比例在所有的显示系统上的一致性。一缇等价于 1/20 个打印机的磅。一逻辑英寸大约有 1440 缇,一逻辑厘米约 567 缇(打印时的一英寸或一厘米所对应的屏幕上的长度)。

How To Print Using Custom Page Sizes on Windows NT and Windows 2000

打印文本直接用Print方法,见下列代码:

Printer. Print “Hello, China computerWorld!” 打印字符串

Printer对象还有一些窗体和图形框都没有方法:

NewPage告诉打印机,程序对当前输出页的发送已经结束,Printer对象应开始新的一页。

EndDoc告诉V

参考资料: bba127d3abb9d8b4

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
frost_007
2008-10-18 · TA获得超过479个赞
知道小有建树答主
回答量:431
采纳率:0%
帮助的人:435万
展开全部
你这两个For循环运行下来,上边的那个Print运行了16次。

你想产生两个4X4的矩阵,只占4行,只需要运行4次就够了。

For i = 1 To 4
Print Tab(20 + 5 * j); a(i, 1); a(i, 2); a(i, 3); a(i, 4); Tab(50 + 5 * j); b(i, 1); b(i, 2); b(i, 3); b(i, 4)
Next i

这个语句有些长,如果矩阵元素多了,这样也不现实。
你可以

For i = 1 To 4
For j = 1 To 4
'此处拼接字符串
Next j
Print 上面拼接好的字符串
Next i
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ARTERIOSCLEROS
2008-10-18 · TA获得超过4183个赞
知道大有可为答主
回答量:1672
采纳率:0%
帮助的人:2426万
展开全部
不用Tab,改用Space。
Print Tab(20 + 5 * j); a(i, j); Tab(50 + 5 * j); b(i, j);
改为:
Print Space(2 + j); a(i, j), Space(2 + j); b(i, j);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式