分享
 
 
 

设计自己的printpreviewdialog

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

自己设计的一个printpreview程序,最大的特点是把页面设置,打印设置,字体设置整合到一个窗口中了。还有很多问题,希望高手指点一二。

源代码:

Imports System.Drawing.printing

Imports System.io

Public Class previewcontrol

Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()

MyBase.New()

'该调用是 Windows 窗体设计器所必需的。

InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'Windows 窗体设计器所必需的

Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的

'可以使用 Windows 窗体设计器修改此过程。

'不要使用代码编辑器修改它。

Friend WithEvents PrintPreviewControl1 As System.Windows.Forms.PrintPreviewControl

Friend WithEvents printsetup As dbcbutton.dbcbutton

Private WithEvents pagesetup As dbcbutton.dbcbutton

Friend WithEvents Label1 As System.Windows.Forms.Label

Friend WithEvents Label2 As System.Windows.Forms.Label

Friend WithEvents Label3 As System.Windows.Forms.Label

Friend WithEvents openfile As dbcbutton.dbcbutton

Friend WithEvents setfont As dbcbutton.dbcbutton

Friend WithEvents printthis As dbcbutton.dbcbutton

Friend WithEvents pagecount As System.Windows.Forms.NumericUpDown

Friend WithEvents pageroom As System.Windows.Forms.ComboBox

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.PrintPreviewControl1 = New System.Windows.Forms.PrintPreviewControl

Me.printsetup = New dbcbutton.dbcbutton

Me.pagesetup = New dbcbutton.dbcbutton

Me.pagecount = New System.Windows.Forms.NumericUpDown

Me.pageroom = New System.Windows.Forms.ComboBox

Me.Label1 = New System.Windows.Forms.Label

Me.Label2 = New System.Windows.Forms.Label

Me.Label3 = New System.Windows.Forms.Label

Me.openfile = New dbcbutton.dbcbutton

Me.setfont = New dbcbutton.dbcbutton

Me.printthis = New dbcbutton.dbcbutton

CType(Me.pagecount, System.ComponentModel.ISupportInitialize).BeginInit()

Me.SuspendLayout()

'

'PrintPreviewControl1

'

Me.PrintPreviewControl1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _

Or System.Windows.Forms.AnchorStyles.Left) _

Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)

Me.PrintPreviewControl1.AutoZoom = False

Me.PrintPreviewControl1.Location = New System.Drawing.Point(8, 40)

Me.PrintPreviewControl1.Name = "PrintPreviewControl1"

Me.PrintPreviewControl1.Size = New System.Drawing.Size(696, 280)

Me.PrintPreviewControl1.TabIndex = 0

Me.PrintPreviewControl1.Zoom = 0.3

'

'printsetup

'

Me.printsetup.BackColor = System.Drawing.SystemColors.Control

Me.printsetup.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.printsetup.GrayColor = System.Drawing.Color.BurlyWood

Me.printsetup.LightColor = System.Drawing.Color.White

Me.printsetup.Location = New System.Drawing.Point(168, 8)

Me.printsetup.mytext = "打印设置"

Me.printsetup.Name = "printsetup"

Me.printsetup.Size = New System.Drawing.Size(72, 24)

Me.printsetup.TabIndex = 1

'

'pagesetup

'

Me.pagesetup.BackColor = System.Drawing.SystemColors.Control

Me.pagesetup.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.pagesetup.GrayColor = System.Drawing.Color.BurlyWood

Me.pagesetup.LightColor = System.Drawing.Color.White

Me.pagesetup.Location = New System.Drawing.Point(256, 8)

Me.pagesetup.mytext = "页面设置"

Me.pagesetup.Name = "pagesetup"

Me.pagesetup.Size = New System.Drawing.Size(72, 24)

Me.pagesetup.TabIndex = 2

'

'pagecount

'

Me.pagecount.Location = New System.Drawing.Point(624, 11)

Me.pagecount.Minimum = New Decimal(New Integer() {1, 0, 0, 0})

Me.pagecount.Name = "pagecount"

Me.pagecount.Size = New System.Drawing.Size(40, 21)

Me.pagecount.TabIndex = 3

Me.pagecount.Value = New Decimal(New Integer() {1, 0, 0, 0})

'

'pageroom

'

Me.pageroom.Items.AddRange(New Object() {"25%", "50%", "75%", "100%"})

Me.pageroom.Location = New System.Drawing.Point(512, 12)

Me.pageroom.Name = "pageroom"

Me.pageroom.Size = New System.Drawing.Size(56, 20)

Me.pageroom.TabIndex = 4

Me.pageroom.Text = "缩放"

'

'Label1

'

Me.Label1.Location = New System.Drawing.Point(456, 16)

Me.Label1.Name = "Label1"

Me.Label1.Size = New System.Drawing.Size(48, 16)

Me.Label1.TabIndex = 5

Me.Label1.Text = "缩放:"

Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'Label2

'

Me.Label2.Location = New System.Drawing.Point(584, 16)

Me.Label2.Name = "Label2"

Me.Label2.Size = New System.Drawing.Size(32, 16)

Me.Label2.TabIndex = 6

Me.Label2.Text = "第"

Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'Label3

'

Me.Label3.Location = New System.Drawing.Point(672, 16)

Me.Label3.Name = "Label3"

Me.Label3.Size = New System.Drawing.Size(32, 16)

Me.Label3.TabIndex = 7

Me.Label3.Text = "页"

Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'openfile

'

Me.openfile.BackColor = System.Drawing.SystemColors.Control

Me.openfile.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.openfile.GrayColor = System.Drawing.Color.BurlyWood

Me.openfile.LightColor = System.Drawing.Color.White

Me.openfile.Location = New System.Drawing.Point(8, 8)

Me.openfile.mytext = "选择文件"

Me.openfile.Name = "openfile"

Me.openfile.Size = New System.Drawing.Size(72, 24)

Me.openfile.TabIndex = 8

'

'setfont

'

Me.setfont.BackColor = System.Drawing.SystemColors.Control

Me.setfont.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.setfont.GrayColor = System.Drawing.Color.BurlyWood

Me.setfont.LightColor = System.Drawing.Color.White

Me.setfont.Location = New System.Drawing.Point(88, 8)

Me.setfont.mytext = "设置字体"

Me.setfont.Name = "setfont"

Me.setfont.Size = New System.Drawing.Size(72, 24)

Me.setfont.TabIndex = 9

'

'printthis

'

Me.printthis.BackColor = System.Drawing.SystemColors.Control

Me.printthis.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.printthis.GrayColor = System.Drawing.Color.BurlyWood

Me.printthis.LightColor = System.Drawing.Color.White

Me.printthis.Location = New System.Drawing.Point(344, 8)

Me.printthis.mytext = "开始打印"

Me.printthis.Name = "printthis"

Me.printthis.Size = New System.Drawing.Size(72, 24)

Me.printthis.TabIndex = 10

'

'previewcontrol

'

Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)

Me.ClientSize = New System.Drawing.Size(712, 325)

Me.Controls.Add(Me.printthis)

Me.Controls.Add(Me.setfont)

Me.Controls.Add(Me.openfile)

Me.Controls.Add(Me.Label3)

Me.Controls.Add(Me.Label2)

Me.Controls.Add(Me.Label1)

Me.Controls.Add(Me.pageroom)

Me.Controls.Add(Me.pagecount)

Me.Controls.Add(Me.pagesetup)

Me.Controls.Add(Me.printsetup)

Me.Controls.Add(Me.PrintPreviewControl1)

Me.Name = "previewcontrol"

Me.Text = "previewcontrol"

CType(Me.pagecount, System.ComponentModel.ISupportInitialize).EndInit()

Me.ResumeLayout(False)

End Sub

#End Region

Private printstream As StreamReader

Private printfont As Font

Dim newprintdocument As New PrintDocument

Private totalpage As Single = 0 '存放总页数

Private Sub previewcontrol_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

AddHandler newprintdocument.PrintPage, AddressOf newprintdocument_printpage

End Sub

'页面的printpage函数

Private Sub newprintdocument_printpage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)

Try

totalpage += 1

If printstream.ReadLine Is Nothing Then

MsgBox("无内容")

Exit Sub

End If

If printfont Is Nothing Then

printfont = New Font("宋体", 12)

End If

Dim pagelines As Single '存放每页可打印的行数

Dim lineheight As Single = printfont.GetHeight(ev.Graphics) '存放行高

Dim xpos As Single = 0 '存放每行打印的X坐标

Dim ypos As Single = 0 '存放每行打印的Y坐标

Dim linecount As Single = 0 '存放已经打印的行数

Dim strformat As New StringFormat

Dim left As Single = ev.MarginBounds.Left

Dim top As Single = ev.MarginBounds.Top

strformat.FormatFlags = StringFormatFlags.LineLimit

Dim printbrush As Brush

printbrush = New SolidBrush(Color.Black)

pagelines = ev.MarginBounds.Height / lineheight

Dim strline As String = Nothing

Do While linecount < pagelines

strline = printstream.ReadLine

If strline Is Nothing Then

Exit Do

End If

top = ev.MarginBounds.Top + linecount * lineheight

ev.Graphics.DrawString(strline, printfont, printbrush, left, top, strformat)

linecount = linecount + 1

Loop

If strline Is Nothing Then

ev.HasMorePages = False

Else

ev.HasMorePages = True

End If

Catch ex As Printing.InvalidPrinterException

MsgBox(ex.Message, MsgBoxStyle.OKOnly, "打印出错")

MsgBox(ex.Source)

Catch ex1 As Exception

MsgBox(ex1.Message)

MsgBox(ex1.Source)

End Try

pagecount.Maximum = totalpage

pagecount.Minimum = 1

End Sub

'打开文件,读取文件流,开始填充打印页面

Private Sub openfile_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openfile.Click

totalpage = 0

If Not (printstream Is Nothing) Then

printstream.Close()

End If

Dim filedialog As New OpenFileDialog

If filedialog.ShowDialog = DialogResult.OK Then

printstream = New StreamReader(filedialog.FileName)

PrintPreviewControl1.Document = newprintdocument

PrintPreviewControl1.Zoom = 1

End If

End Sub

'字体设置对话框

Private Sub setfont_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles setfont.Click

Dim setfontdialog As New FontDialog

If setfontdialog.ShowDialog = DialogResult.OK Then

totalpage = 0

printstream.BaseStream.Seek(0, SeekOrigin.Begin)

printfont = setfontdialog.Font

PrintPreviewControl1.InvalidatePreview()

Me.Refresh()

End If

End Sub

'打印设置对话框

Private Sub printsetup_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printsetup.Click

Dim printsetup As New PrintDialog

printsetup.Document = newprintdocument

If printsetup.ShowDialog = DialogResult.OK Then

totalpage = 0

printstream.BaseStream.Seek(0, SeekOrigin.Begin)

PrintPreviewControl1.InvalidatePreview()

Me.Refresh()

End If

End Sub

'页面设置对话框

Private Sub pagesetup_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pagesetup.Click

Dim pagesetup As New PageSetupDialog

pagesetup.Document = newprintdocument

If pagesetup.ShowDialog = DialogResult.OK Then

totalpage = 0

printstream.BaseStream.Seek(0, SeekOrigin.Begin)

PrintPreviewControl1.InvalidatePreview()

Me.Refresh()

End If

End Sub

'打印文档

Private Sub printthis_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printthis.Click

newprintdocument.Print()

End Sub

'当窗口关闭时关闭文档流

Private Sub previewcontrol_onclose(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed

If Not (printstream Is Nothing) Then

printstream.Close()

End If

End Sub

'改变当前显示的页面

Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pagecount.ValueChanged

PrintPreviewControl1.StartPage = pagecount.Value - 1

End Sub

'改变显示比例

Private Sub pageroom_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pageroom.SelectedIndexChanged

Select Case pageroom.Items(pageroom.SelectedIndex)

Case "25%"

PrintPreviewControl1.Zoom = 0.25

PrintPreviewControl1.Refresh()

Me.Refresh()

Case "50%"

PrintPreviewControl1.Zoom = 0.5

PrintPreviewControl1.Refresh()

Me.Refresh()

Case "75%"

PrintPreviewControl1.Zoom = 0.75

PrintPreviewControl1.Refresh()

Me.Refresh()

Case "100%"

PrintPreviewControl1.Zoom = 1

PrintPreviewControl1.Refresh()

Me.Refresh()

End Select

End Sub

End Class

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有