用vb.net实现类似写字板程序的部分源代码

    技术2022-05-11  59

    '欢迎与我交流:luluhai@eastday.com

    所有源代码均在这里下载:http://www.up2e.com/resource.php

    '本程序代码是VB.NET课程设计的作业'代码编写及整理:路海

    Imports System.Drawing.PrintingImports System.Drawing.FontPublic Class formMain    Inherits System.Windows.Forms.Form

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

        Public Sub New()        MyBase.New()

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

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

        End Sub

        '窗体重写处置以清理组件列表。    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 MainMenu1 As System.Windows.Forms.MainMenu    Friend WithEvents mFile As System.Windows.Forms.MenuItem    Friend WithEvents mNew As System.Windows.Forms.MenuItem    Friend WithEvents mOpen As System.Windows.Forms.MenuItem  '.....................  '.......................  '.....................  '由于很长,我把他略去了  '.................  '..................        Me.Panel1.SuspendLayout()        Me.SuspendLayout()        '        'MainMenu1        '        Me.MainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mFile, Me.mEdit, Me.mView, Me.mFormat, Me.mHelp})        '        'mFile        '        Me.mFile.Index = 0        Me.mFile.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mNew, Me.mOpen, Me.mSave, Me.mSaveas, Me.MenuItem6, Me.mPrint, Me.mPrintpreview, Me.mPagesetup, Me.MenuItem10, Me.mExit})        Me.mFile.Text = "文件(&F)"        '        'mNew        '        Me.mNew.Index = 0        Me.mNew.Shortcut = System.Windows.Forms.Shortcut.CtrlN        Me.mNew.Text = "新建(&N)..."        '        'mOpen        '        Me.mOpen.Index = 1        Me.mOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO        Me.mOpen.Text = "打开(&O)...  "        '        'mSave        '        Me.mSave.Index = 2        Me.mSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS        Me.mSave.Text = "保存(&S)      "        '        'mSaveas        '        Me.mSaveas.Index = 3        Me.mSaveas.Text = "另存为(&A)..."        '        'MenuItem6        '        Me.MenuItem6.Index = 4        Me.MenuItem6.Text = "-"        '        'mPrint        '        Me.mPrint.Index = 5        Me.mPrint.Shortcut = System.Windows.Forms.Shortcut.CtrlP        Me.mPrint.Text = "打印(&P)..."        '        'mPrintpreview        '        Me.mPrintpreview.Index = 6        Me.mPrintpreview.Text = "打印预览(&V)"        '        'mPagesetup        '        Me.mPagesetup.Index = 7        Me.mPagesetup.Text = "页面设置(&U)..."        '        'MenuItem10        '        Me.MenuItem10.Index = 8        Me.MenuItem10.Text = "-"        '        'mExit        '        Me.mExit.Index = 9        Me.mExit.Text = "退出(&X)"        '        'mEdit        '        Me.mEdit.Index = 1        Me.mEdit.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mUndo, Me.MenuItem1, Me.mCut, Me.mCopy, Me.mPaste, Me.mClear, Me.mSelectall, Me.MenuItem21, Me.mFind, Me.mFindnext, Me.mReplace})        Me.mEdit.Text = "编辑(&E)"        '        'mUndo        '        Me.mUndo.Index = 0        Me.mUndo.Shortcut = System.Windows.Forms.Shortcut.CtrlZ        Me.mUndo.Text = "撤销(&U)"        '        'MenuItem1        '        Me.MenuItem1.Index = 1        Me.MenuItem1.Text = "-"        '        'mCut        '        Me.mCut.Index = 2        Me.mCut.Shortcut = System.Windows.Forms.Shortcut.CtrlX        Me.mCut.Text = "剪切(&T)"        '        'mCopy        '        Me.mCopy.Index = 3        Me.mCopy.Shortcut = System.Windows.Forms.Shortcut.CtrlC        Me.mCopy.Text = "复制(&C)"        '        'mPaste        '        Me.mPaste.Index = 4        Me.mPaste.Shortcut = System.Windows.Forms.Shortcut.CtrlP        Me.mPaste.Text = "粘贴(&P)"        '        'mClear        '        Me.mClear.Index = 5        Me.mClear.Shortcut = System.Windows.Forms.Shortcut.Del        Me.mClear.Text = "清除(&A)"        '        'mSelectall        '        Me.mSelectall.Index = 6        Me.mSelectall.Shortcut = System.Windows.Forms.Shortcut.CtrlA        Me.mSelectall.Text = "全选(&L)"        '        'MenuItem21        '        Me.MenuItem21.Index = 7        Me.MenuItem21.Text = "-"        '        'mFind        '        Me.mFind.Index = 8        Me.mFind.Shortcut = System.Windows.Forms.Shortcut.CtrlF        Me.mFind.Text = "查找(&F)..."        '        'mFindnext        '        Me.mFindnext.Index = 9        Me.mFindnext.Shortcut = System.Windows.Forms.Shortcut.F3        Me.mFindnext.Text = "查找下一个(&N)"        '        'mReplace        '        Me.mReplace.Index = 10        Me.mReplace.Shortcut = System.Windows.Forms.Shortcut.CtrlH        Me.mReplace.Text = "替换(&E)..."        '        'mView        '        Me.mView.Index = 2        Me.mView.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mStatusbar})        Me.mView.Text = "查看(&V)"        '        'mStatusbar        '        Me.mStatusbar.Checked = True        Me.mStatusbar.Index = 0        Me.mStatusbar.Text = "状态栏(&S)"        '        'mFormat        '        Me.mFormat.Index = 3        Me.mFormat.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mFont, Me.MenuItem2})        Me.mFormat.Text = "格式(&D)"        '        'mFont        '        Me.mFont.Index = 0        Me.mFont.Text = "字体(&F)..."        '        'MenuItem2        '        Me.MenuItem2.Index = 1        Me.MenuItem2.Text = "颜色(&C)..."        '        'mHelp        '        Me.mHelp.Index = 4        Me.mHelp.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mHelptopics, Me.MenuItem34, Me.mAbout})        Me.mHelp.Text = "帮助(&H)"        '        'mHelptopics        '        Me.mHelptopics.Index = 0        Me.mHelptopics.Text = "帮助主题(&H)"        '        'MenuItem34        '        Me.MenuItem34.Index = 1        Me.MenuItem34.Text = "-"        '        'mAbout        '        Me.mAbout.Index = 2        Me.mAbout.Text = "关于本写字板作业(&A)"        '        'SaveFileDialog1        '        Me.SaveFileDialog1.FileName = "doc1"        '        'ToolBar1        '        Me.ToolBar1.AllowDrop = True        Me.ToolBar1.AutoSize = False        Me.ToolBar1.Buttons.AddRange(New System.Windows.Forms.ToolBarButton() {Me.tbbNew, Me.tbbOpen, Me.tbbSave, Me.ToolBarButton1, Me.ToolBarButton2, Me.vbbPrint, Me.tbbPreview, Me.ToolBarButton3, Me.ToolBarButton4, Me.tbbFind, Me.ToolBarButton5, Me.ToolBarButton6, Me.tbbCut, Me.tbbCopy, Me.tbbPaste, Me.tbbUndo})        Me.ToolBar1.ButtonSize = New System.Drawing.Size(25, 24)        Me.ToolBar1.DropDownArrows = True        Me.ToolBar1.ImageList = Me.ImageList1        Me.ToolBar1.Name = "ToolBar1"        Me.ToolBar1.ShowToolTips = True        Me.ToolBar1.Size = New System.Drawing.Size(688, 32)        Me.ToolBar1.TabIndex = 0        '        'tbbNew        '        Me.tbbNew.ImageIndex = 5        Me.tbbNew.ToolTipText = "新建"        '        'tbbOpen        '        Me.tbbOpen.ImageIndex = 6        Me.tbbOpen.ToolTipText = "打开"        '        'tbbSave        '        Me.tbbSave.ImageIndex = 10        Me.tbbSave.ToolTipText = "保存"        '        'ToolBarButton1        '        Me.ToolBarButton1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'ToolBarButton2        '        Me.ToolBarButton2.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'vbbPrint        '        Me.vbbPrint.ImageIndex = 9        Me.vbbPrint.ToolTipText = "打印"        '        'tbbPreview        '        Me.tbbPreview.ImageIndex = 8        Me.tbbPreview.ToolTipText = "打印预览"        '        'ToolBarButton3        '        Me.ToolBarButton3.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'ToolBarButton4        '        Me.ToolBarButton4.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'tbbFind        '        Me.tbbFind.ImageIndex = 12        Me.tbbFind.ToolTipText = "查找"        '        'ToolBarButton5        '        Me.ToolBarButton5.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'ToolBarButton6        '        Me.ToolBarButton6.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'tbbCut        '        Me.tbbCut.ImageIndex = 4        Me.tbbCut.ToolTipText = "剪切"        '        'tbbCopy        '        Me.tbbCopy.ImageIndex = 3        Me.tbbCopy.ToolTipText = "复制"        '        'tbbPaste        '        Me.tbbPaste.ImageIndex = 7        Me.tbbPaste.ToolTipText = "粘贴"        '        'tbbUndo        '        Me.tbbUndo.ImageIndex = 11        Me.tbbUndo.ToolTipText = "撤销"        '        'ImageList1        '        Me.ImageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit        Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)        Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer)        Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent        '        'rtbox        '        Me.rtbox.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _                    Or System.Windows.Forms.AnchorStyles.Left) _                    Or System.Windows.Forms.AnchorStyles.Right)        Me.rtbox.Font = New System.Drawing.Font("宋体", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))        Me.rtbox.Location = New System.Drawing.Point(0, 64)        Me.rtbox.Name = "rtbox"        Me.rtbox.Size = New System.Drawing.Size(688, 424)        Me.rtbox.TabIndex = 3        Me.rtbox.Text = ""        '        'PrintDialog1        '        Me.PrintDialog1.Document = Me.PrintDocument1        '        'comboxFont        '        Me.comboxFont.Font = New System.Drawing.Font("宋体", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))        Me.comboxFont.Location = New System.Drawing.Point(184, 40)        Me.comboxFont.Name = "comboxFont"        Me.comboxFont.Size = New System.Drawing.Size(121, 20)        Me.comboxFont.TabIndex = 5        Me.comboxFont.Text = "字体"        '        'comboxSize        '        Me.comboxSize.Items.AddRange(New Object() {"8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72"})        Me.comboxSize.Location = New System.Drawing.Point(304, 40)        Me.comboxSize.Name = "comboxSize"        Me.comboxSize.Size = New System.Drawing.Size(48, 20)        Me.comboxSize.TabIndex = 6        Me.comboxSize.Text = "大小"        '        'tbbbold        '        Me.tbbbold.ImageIndex = 0        Me.tbbbold.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton        Me.tbbbold.ToolTipText = "加粗"        '        'tbbi        '        Me.tbbi.ImageIndex = 1        Me.tbbi.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton        Me.tbbi.ToolTipText = "斜体"        '        'tbbu        '        Me.tbbu.ImageIndex = 2        Me.tbbu.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton        Me.tbbu.ToolTipText = "下划线"        '        'tbbcolor        '        Me.tbbcolor.ImageIndex = 16        Me.tbbcolor.ToolTipText = "这个是颜色!因为找不到合适的。"        '        'ToolBarButton8        '        Me.ToolBarButton8.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'ToolBarButton7        '        Me.ToolBarButton7.Style = System.Windows.Forms.ToolBarButtonStyle.Separator        '        'tbbleft        '        Me.tbbleft.ImageIndex = 13        Me.tbbleft.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton        Me.tbbleft.ToolTipText = "靠左"        '        'tbbmiddle        '        Me.tbbmiddle.ImageIndex = 15        Me.tbbmiddle.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton        Me.tbbmiddle.ToolTipText = "靠中"        '        'tbbright        '        Me.tbbright.ImageIndex = 14        Me.tbbright.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton        Me.tbbright.ToolTipText = "靠右"        '        'ToolBar2        '        Me.ToolBar2.Buttons.AddRange(New System.Windows.Forms.ToolBarButton() {Me.tbbbold, Me.tbbi, Me.tbbu, Me.tbbcolor, Me.ToolBarButton8, Me.ToolBarButton7, Me.tbbleft, Me.tbbmiddle, Me.tbbright})        Me.ToolBar2.ButtonSize = New System.Drawing.Size(23, 22)        Me.ToolBar2.DropDownArrows = True        Me.ToolBar2.ImageList = Me.ImageList1        Me.ToolBar2.Location = New System.Drawing.Point(0, 32)        Me.ToolBar2.Name = "ToolBar2"        Me.ToolBar2.ShowToolTips = True        Me.ToolBar2.Size = New System.Drawing.Size(688, 25)        Me.ToolBar2.TabIndex = 7        '        'StatusBar1        '        Me.StatusBar1.Location = New System.Drawing.Point(0, 467)        Me.StatusBar1.Name = "StatusBar1"        Me.StatusBar1.Size = New System.Drawing.Size(688, 22)        Me.StatusBar1.TabIndex = 8        '        'Panel1        '        Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle        Me.Panel1.Controls.AddRange(New System.Windows.Forms.Control() {Me.PictureBox1, Me.closepanel, Me.Label1, Me.mpreplace, Me.findnext, Me.find, Me.rpbox, Me.txtbox})        Me.Panel1.Location = New System.Drawing.Point(192, 160)        Me.Panel1.Name = "Panel1"        Me.Panel1.Size = New System.Drawing.Size(272, 96)        Me.Panel1.TabIndex = 9        Me.Panel1.Visible = False        '        'PictureBox1        '        Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Bitmap)        Me.PictureBox1.Location = New System.Drawing.Point(8, 8)        Me.PictureBox1.Name = "PictureBox1"        Me.PictureBox1.Size = New System.Drawing.Size(16, 16)        Me.PictureBox1.TabIndex = 7        Me.PictureBox1.TabStop = False        '        'closepanel        '        Me.closepanel.Font = New System.Drawing.Font("宋体", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))        Me.closepanel.ForeColor = System.Drawing.Color.Black        Me.closepanel.Location = New System.Drawing.Point(240, 64)        Me.closepanel.Name = "closepanel"        Me.closepanel.Size = New System.Drawing.Size(24, 24)        Me.closepanel.TabIndex = 6        Me.closepanel.Text = "关"        '        'Label1        '        Me.Label1.Location = New System.Drawing.Point(24, 8)        Me.Label1.Name = "Label1"        Me.Label1.Size = New System.Drawing.Size(61, 16)        Me.Label1.TabIndex = 5        Me.Label1.Text = "查找-可拖"        '        'mpreplace        '        Me.mpreplace.Location = New System.Drawing.Point(112, 64)        Me.mpreplace.Name = "mpreplace"        Me.mpreplace.Size = New System.Drawing.Size(72, 23)        Me.mpreplace.TabIndex = 4        Me.mpreplace.Text = "替换"        '        'findnext        '        Me.findnext.Location = New System.Drawing.Point(192, 32)        Me.findnext.Name = "findnext"        Me.findnext.TabIndex = 3        Me.findnext.Text = "下一个"        '        'find        '        Me.find.Location = New System.Drawing.Point(112, 32)        Me.find.Name = "find"        Me.find.Size = New System.Drawing.Size(72, 23)        Me.find.TabIndex = 2        Me.find.Text = "查找"        '        'rpbox        '        Me.rpbox.Location = New System.Drawing.Point(8, 64)        Me.rpbox.Name = "rpbox"        Me.rpbox.TabIndex = 1        Me.rpbox.Text = ""        '        'txtbox        '        Me.txtbox.Location = New System.Drawing.Point(8, 32)        Me.txtbox.Name = "txtbox"        Me.txtbox.TabIndex = 0        Me.txtbox.Text = ""        '        'formMain        '        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)        Me.ClientSize = New System.Drawing.Size(688, 489)        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Panel1, Me.StatusBar1, Me.comboxSize, Me.comboxFont, Me.ToolBar2, Me.rtbox, Me.ToolBar1})        Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)        Me.Menu = Me.MainMenu1        Me.Name = "formMain"        Me.Text = "VB.NET课程设计作业2-写字板:::::By SunnyGroup 2002:::Shanghai Fisheries University:::::"        Me.Panel1.ResumeLayout(False)        Me.ResumeLayout(False)

        End Sub

    #End Region

        '声明一个全局boolean变量,用来标记richtextbox中文本变化和保存情况    Dim bSave As Boolean

     

        '下面这段程序用于对对话框属性和全局变量进行初始化设置    Private Sub formMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        '为bSave首先赋初值        bSave = True        '为savefiledialog进行初始化        SaveFileDialog1.FileName = ""        SaveFileDialog1.DefaultExt = "txt"        SaveFileDialog1.Filter = "Text files (*.txt) |*.txt|All files (*.*) |*.*"        SaveFileDialog1.Title = "保存文件.."        '为openfiledialog进行初始化        OpenFileDialog1.FileName = ""        OpenFileDialog1.DefaultExt = "txt"        OpenFileDialog1.Filter = "Text files (*.txt) |*.txt|All files (*.*) |*.*"        OpenFileDialog1.Title = "打开文件.."        '下面这段代码是加载当地系统中所有字体到Combobox中        Dim allfonts As FontFamily        For Each allfonts In System.Drawing.FontFamily.Families            comboxFont.Items.Add(allfonts.Name)        Next    End Sub

        Private Sub rtbox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rtbox.TextChanged        '文本发生了改变,则将变量bSave置为False        bSave = False    End Sub

        '********************************************************************************************    '字体

        '下面这个函数是用来去除用户指定的字体样式,如加粗,下划线等等    Public Sub RemoveFontStyle(ByVal rtb As RichTextBox, _    ByVal style As System.Drawing.FontStyle)        ' 如果选择文本的长度大于0,将一个一个去除样式。        ' 这是十分必要的!因为选择的文本中可能有许多不同的样式,而我们的原意是        ' 保持所有原来的样式,除了那个要被去除的样式        If rtb.SelectionLength > 0 Then            Dim selStart As Integer = rtb.SelectionStart            Dim selLength As Integer = rtb.SelectionLength            Dim currFont As System.Drawing.Font            Dim currStyle As System.Drawing.FontStyle

                Dim i As Integer            For i = 0 To selLength - 1                ' 选择一个字符                rtb.Select(selStart + i, 1)                ' 得到被选择字符的字体                currFont = rtb.SelectionFont                ' 得到被选择字符的样式,同时去除要被除去的那个样式                 currStyle = currFont.Style                currStyle = currStyle And Not style                ' 然后赋予这些字符新的字体和样式                rtb.SelectionFont = New Font(currFont.FontFamily, currFont.Size, _    currStyle)            Next            ' 保持原有的选择            rtb.Select(selStart, selLength)        Else            rtb.SelectionFont = New Font(rtb.SelectionFont, _                rtb.SelectionFont.Style And Not style)        End If    End Sub

        '下面这个函数是用来增加字体的样式,比如加粗,下划线等等    Public Sub AddFontStyle(ByVal rtb As RichTextBox, _    ByVal style As System.Drawing.FontStyle)        ' 如果选择的文本长度大于0,将一个一个字符地增加样式。        '这是十分必要的!因为被选择的字符可能同时含有多种样式,        ' 而我们的原意只是保持所有原来的样式,同时增加上指定的样式

            If rtb.SelectionLength > 0 Then            Dim selStart As Integer = rtb.SelectionStart            Dim selLength As Integer = rtb.SelectionLength            Dim currFont As System.Drawing.Font            Dim currStyle As System.Drawing.FontStyle

                Dim i As Integer            For i = 0 To selLength - 1                ' 选择的字符                rtb.Select(selStart + i, 1)                ' 得到被选择字符的字体                currFont = rtb.SelectionFont                ' 得到现在的样式,同时增加指定的样式                 currStyle = currFont.Style                currStyle = currStyle Or style                ' 然后使字符拥有新的字体和新的样式,有可能出现异常,                 '因为不是所有字体都支持所有的样式,所以这里捕捉异常                Try                    rtb.SelectionFont = New Font(currFont.FontFamily, currFont.Size, _                        currStyle)                Catch ex As Exception                End Try            Next

                rtb.Select(selStart, selLength)        Else            rtb.SelectionFont = New Font(rtb.SelectionFont, _                rtb.SelectionFont.Style Or style)        End If    End Sub

        '并不是所有的字体都支持所有的样式,下面这个函数是用来检查新字体是否支持选择的样式,若不支持,则移除该样式    '使用举例: GetSafeStyleForFontFamily(richTextBox1.SelectionFont.FontFamily,richTextBox1.SelectionFont.Style)    Public Function GetSafeStyleForFontFamily(ByVal fontFam As FontFamily, _        ByVal style As FontStyle) As FontStyle        ' 移除不支持的样式        If (style And FontStyle.Regular) = FontStyle.Regular Then            If Not fontFam.IsStyleAvailable(FontStyle.Regular) Then                style = style And Not FontStyle.Regular            End If        End If        If (style And FontStyle.Bold) = FontStyle.Bold Then            If Not fontFam.IsStyleAvailable(FontStyle.Bold) Then                style = style And Not FontStyle.Bold            End If        End If        If (style And FontStyle.Italic) = FontStyle.Italic Then            If Not fontFam.IsStyleAvailable(FontStyle.Italic) Then                style = style And Not FontStyle.Italic            End If        End If        If (style And FontStyle.Underline) = FontStyle.Underline Then            If Not fontFam.IsStyleAvailable(FontStyle.Underline) Then                style = style And Not FontStyle.Underline            End If        End If        If (style And FontStyle.Strikeout) = FontStyle.Strikeout Then            If Not fontFam.IsStyleAvailable(FontStyle.Strikeout) Then                style = style And Not FontStyle.Strikeout            End If        End If        Return style    End Function

        '下面这个SetFontSize函数是用来设置字体的大小    Public Sub SetFontSize(ByVal rtb As RichTextBox, ByVal fontSize As Single)

            If rtb.SelectionLength > 0 Then            Dim selStart As Integer = rtb.SelectionStart            Dim selLength As Integer = rtb.SelectionLength            Dim currFont As System.Drawing.Font

                Dim i As Integer            For i = 0 To selLength - 1

                    rtb.Select(selStart + i, 1)

                    currFont = rtb.SelectionFont

                    rtb.SelectionFont = New Font(currFont.FontFamily, fontSize, _                    currFont.Style)            Next

                rtb.Select(selStart, selLength)        Else            rtb.SelectionFont = New Font(rtb.SelectionFont.Name, fontSize, _                rtb.SelectionFont.Style)        End If    End Sub

        '下面这个SetFontFamily函数是用来设置字体的变化    Public Sub SetFontFamily(ByVal rtb As RichTextBox, ByVal fontName As String)        Dim fontFam As New System.Drawing.FontFamily(fontName)        Dim style As System.Drawing.FontStyle

            If rtb.SelectionLength > 0 Then            Dim selStart As Integer = rtb.SelectionStart            Dim selLength As Integer = rtb.SelectionLength

                Dim i As Integer            For i = 0 To selLength - 1

                    rtb.Select(selStart + i, 1)

                    style = GetSafeStyleForFontFamily(fontFam, rtb.SelectionFont.Style)

                    rtb.SelectionFont = New Font(fontFam, rtb.SelectionFont.Size, style)            Next

                rtb.Select(selStart, selLength)        Else

                style = GetSafeStyleForFontFamily(fontFam, rtb.SelectionFont.Style)

                rtb.SelectionFont = New Font(fontFam, rtb.SelectionFont.Size, style)        End If    End Sub

        '************************************************************************************

        '下面这个函数是用来新建文件    Private Sub newfile()        Dim flag As Integer        '如果文本已经被保存,则清空rtbox内容,所有变量重置以新建文本        If bSave Then            rtbox.Clear()            SaveFileDialog1.FileName = ""            bSave = True        Else            '如果文本没有保存,则提示是否要保存            flag = MessageBox.Show("文件内容已更改,想保存文件吗??", "info", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)            Select Case flag                'case 6是当用户选择了“保存”,则执行保存文件的操作            Case 6                    '如果没有选择要保存的文件名,则弹出保存对话框,由用户选择要保存的文件名后保存文本                    If SaveFileDialog1.FileName = "" Then                        If SaveFileDialog1.ShowDialog Then                            rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)                        End If                    Else                        '如果已经选择了要保存的文件名,则保存文本到文件中                        rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)                    End If                    '然后就是清空rtbox的内容,重置变量以新建文本                    bSave = True                    rtbox.Clear()                    SaveFileDialog1.FileName = ""

                        'case 7就是当用户选择了no也就是不保存时,立即清空rtbox内容,重置变量以新建文本                Case 7                    rtbox.Clear()                    SaveFileDialog1.FileName = ""                    bSave = True

                        'case else就是当用户选择了取消,则取消新建操作,也就是Do Nothing                Case Else            End Select        End If    End Sub

        '下面这个函数是用来打开文件    Private Sub openfile()        Dim flag As Integer        '如果文本内容没有保存,询问用户是否保存        If Not bSave Then            flag = MessageBox.Show("文件内容已更改,想保存文件吗??", "info", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)            Select Case flag                'case 6是当用户选择了“保存”,则执行保存文件的操作            Case 6                    '如果没有选择要保存的文件名,则弹出保存对话框,由用户选择要保存的文件名后保存文本                    If SaveFileDialog1.FileName = "" Then                        If SaveFileDialog1.ShowDialog Then                            rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)                        End If                    Else                        '如果已经选择了要保存的文件名,则保存文本到文件中                        rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)                    End If                    '弹出打开文件对话框,执行打开文件操作                    bSave = True                    If OpenFileDialog1.ShowDialog() = DialogResult.OK Then                        rtbox.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)                    End If

                        'case 7的意思是如果用户选择了“不保存”,则直接执行打开文件操作                Case 7                    If OpenFileDialog1.ShowDialog() = DialogResult.OK Then                        rtbox.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)                    End If                    bSave = True

                        'case else也就是用户选择了取消                Case Else            End Select

                'else文本已经保存,直接执行打开文件操作        Else            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then                rtbox.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)            End If            bSave = True        End If    End Sub

        '下面这个函数是用来保存文件    Private Sub savefile()        '如果没有选择要保存的文件名,则弹出保存对话框,由用户选择要保存的文件名后保存文本        If SaveFileDialog1.FileName = "" Then            If SaveFileDialog1.ShowDialog Then                rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)            End If        Else            '如果已经选择了要保存的文件名,则保存文本到文件中            rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)        End If        bSave = True    End Sub

        '*****************************************************************************    '打印,打印预览

        ' 必须确定所有的打印事件都是针对同一个 PrintDocument    Private WithEvents pdoc As New PrintDocument()

        ' 打印文件是一个函数性的打印事件,每当要打印时该事件被触发    ' 下面是一个非常快速和有用的精确计算要打印的文本是否能够被包括到整张打印页面    '是我从微软站点上得到的资料,我把它应用到了我的程序中    Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdoc.PrintPage        ' Declare a variable to hold the position of the last printed char. Declare        ' as static so that subsequent PrintPage events can reference it.        Static intCurrentChar As Int32        ' Initialize the font to be used for printing.        Dim font As New font("Microsoft Sans Serif", 24)

            Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32        With pdoc.DefaultPageSettings            ' Initialize local variables that contain the bounds of the printing             ' area rectangle.            intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom            intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right

                ' Initialize local variables to hold margin values that will serve            ' as the X and Y coordinates for the upper left corner of the printing             ' area rectangle.            marginLeft = .Margins.Left ' X coordinate            marginTop = .Margins.Top ' Y coordinate        End With

            ' If the user selected Landscape mode, swap the printing area height         ' and width.        If pdoc.DefaultPageSettings.Landscape Then            Dim intTemp As Int32            intTemp = intPrintAreaHeight            intPrintAreaHeight = intPrintAreaWidth            intPrintAreaWidth = intTemp        End If

            ' Calculate the total number of lines in the document based on the height of        ' the printing area and the height of the font.        Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)        ' Initialize the rectangle structure that defines the printing area.        Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)

            ' Instantiate the StringFormat class, which encapsulates text layout         ' information (such as alignment and line spacing), display manipulations         ' (such as ellipsis insertion and national digit substitution) and OpenType         ' features. Use of StringFormat causes MeasureString and DrawString to use        ' only an integer number of lines when printing each page, ignoring partial        ' lines that would otherwise likely be printed if the number of lines per         ' page do not divide up cleanly for each page (which is usually the case).        ' See further discussion in the SDK documentation about StringFormatFlags.        Dim fmt As New StringFormat(StringFormatFlags.LineLimit)        ' Call MeasureString to determine the number of characters that will fit in        ' the printing area rectangle. The CharFitted Int32 is passed ByRef and used        ' later when calculating intCurrentChar and thus HasMorePages. LinesFilled         ' is not needed for this sample but must be passed when passing CharsFitted.        ' Mid is used to pass the segment of remaining text left off from the         ' previous page of printing (recall that intCurrentChar was declared as         ' static.        Dim intLinesFilled, intCharsFitted As Int32        e.Graphics.MeasureString(Mid(rtbox.Text, intCurrentChar + 1), font, _                    New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _                    intCharsFitted, intLinesFilled)

            ' Print the text to the page.        e.Graphics.DrawString(Mid(rtbox.Text, intCurrentChar + 1), font, _            Brushes.Black, rectPrintingArea, fmt)

            ' Advance the current char to the last char printed on this page. As         ' intCurrentChar is a static variable, its value can be used for the next        ' page to be printed. It is advanced by 1 and passed to Mid() to print the        ' next page (see above in MeasureString()).        intCurrentChar += intCharsFitted

            ' HasMorePages tells the printing module whether another PrintPage event        ' should be fired.        If intCurrentChar < rtbox.Text.Length Then            e.HasMorePages = True        Else            e.HasMorePages = False            ' You must explicitly reset intCurrentChar as it is static.            intCurrentChar = 0        End If    End Sub

        Private Sub printpreview()        Dim ppd As New PrintPreviewDialog()        Try            ppd.Document = pdoc            ppd.ShowDialog()        Catch exp As Exception            MessageBox.Show("有错误发生!!不能预览 !" & _                "确信现在你是否能够 " & _                "连接到一个打印机?" & _                "然后预览才可以.", Me.Text, _                 MessageBoxButtons.OK, MessageBoxIcon.Error)        End Try    End Sub

        Private Sub mPrintpreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mPrintpreview.Click        printpreview()    End Sub

        Private Sub mPagesetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mPagesetup.Click        Dim psd As New PageSetupDialog()        With psd            .Document = pdoc            .PageSettings = pdoc.DefaultPageSettings        End With

            If psd.ShowDialog = DialogResult.OK Then            pdoc.DefaultPageSettings = psd.PageSettings        End If    End Sub

        Private Sub printfile()        Dim dialog As New PrintDialog()        dialog.Document = pdoc

            If dialog.ShowDialog = DialogResult.OK Then            pdoc.Print()        End If    End Sub    '********************************************************************************

        Private Sub mNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mNew.Click        newfile()    End Sub

     

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

        Private Sub mSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mSave.Click        savefile()    End Sub

        Private Sub mSaveas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mSaveas.Click        '将保存文件窗口标题改为“文件另存为”        SaveFileDialog1.Title = "文件另存为"        If SaveFileDialog1.ShowDialog() = DialogResult.OK Then            rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)            bSave = True        End If        '将标题改回        SaveFileDialog1.Title = "保存文件"    End Sub

        Private Sub mExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mExit.Click        '退出操作        Close()    End Sub

        '在关闭程序之前,判断文本是否需要保存    Private Sub formMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing        If bSave = False Then            Dim flag As Integer            flag = MessageBox.Show("文件内容已更改,想保存文件吗??", "info", MessageBoxButtons.YesNo, MessageBoxIcon.Information)            Select Case flag                'case 6是当用户选择了“保存”,则执行保存文件的操作            Case 6                    '如果没有选择要保存的文件名,则弹出保存对话框,由用户选择要保存的文件名后保存文本                    If SaveFileDialog1.FileName = "" Then                        If SaveFileDialog1.ShowDialog Then                            rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)                        End If                    Else                        '如果已经选择了要保存的文件名,则保存文本到文件中                        rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)                    End If                Case Else                    '不保存            End Select        End If    End Sub

        '关于显示“关于”窗体的代码    Private Sub mAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mAbout.Click        '首先需要定义一个“关于”Form的实例        Dim fAbout As New formAbout()        '显示他        fAbout.Show()    End Sub

        Private Sub mFont_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mFont.Click        If FontDialog1.ShowDialog() = DialogResult.OK Then            rtbox.Font = FontDialog1.Font        End If    End Sub

        Private Sub mUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mUndo.Click        rtbox.Undo()    End Sub

        Private Sub mCut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mCut.Click        rtbox.Cut()    End Sub

        Private Sub mCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mCopy.Click        rtbox.Copy()    End Sub

        Private Sub mPaste_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mPaste.Click        rtbox.Paste()    End Sub

        Private Sub mClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mClear.Click        rtbox.Clear()    End Sub

        Private Sub mSelectall_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mSelectall.Click        rtbox.SelectAll()    End Sub

        Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick        Select Case ToolBar1.Buttons.IndexOf(e.Button)            Case 0                newfile()            Case 1                openfile()            Case 2                savefile()            Case 5                printfile()            Case 6                printpreview()            Case 9                Panel1.Visible = True            Case 12                rtbox.Cut()            Case 13                rtbox.Copy()            Case 14                rtbox.Paste()            Case 15                rtbox.Undo()

            End Select    End Sub

     

     

        Private Sub mPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mPrint.Click        printfile()    End Sub

        Private Sub comboxFont_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboxFont.SelectedIndexChanged        SetFontFamily(rtbox, comboxFont.Text)    End Sub

        Private Sub comboxSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboxSize.SelectedIndexChanged        SetFontSize(rtbox, comboxSize.SelectedItem)    End Sub

     

     

     

        Private Sub ToolBar2_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar2.ButtonClick        Select Case ToolBar2.Buttons.IndexOf(e.Button)            Case 0                If tbbbold.Pushed = True Then                    AddFontStyle(rtbox, FontStyle.Bold)                Else                    RemoveFontStyle(rtbox, FontStyle.Bold)                End If

                Case 1                If tbbi.Pushed = True Then                    AddFontStyle(rtbox, FontStyle.Italic)                Else                    RemoveFontStyle(rtbox, FontStyle.Italic)                End If

                Case 2                If tbbu.Pushed = True Then                    AddFontStyle(rtbox, FontStyle.Underline)                Else                    RemoveFontStyle(rtbox, FontStyle.Underline)                End If

                Case 3                ColorDialog1.ShowDialog()                rtbox.ForeColor = ColorDialog1.Color

                Case 6                rtbox.SelectionAlignment = HorizontalAlignment.Left                tbbmiddle.Pushed = False                tbbright.Pushed = False            Case 7                rtbox.SelectionAlignment = HorizontalAlignment.Center                tbbleft.Pushed = False                tbbright.Pushed = False            Case 8                rtbox.SelectionAlignment = HorizontalAlignment.Right                tbbleft.Pushed = False                tbbmiddle.Pushed = False

            End Select

        End Sub    '********************************************    '菜单中的隐藏状态栏功能    Private Sub mStatusbar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mStatusbar.Click        If mStatusbar.Checked = True Then            StatusBar1.Visible = False            mStatusbar.Checked = False        Else            StatusBar1.Visible = True            mStatusbar.Checked = True        End If    End Sub    '********************************************    '状态栏的信息    Private Sub HandleSelect(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mStatusbar.Select, mAbout.Select, mClear.Select, mCopy.Select, mNew.Select, mCut.Select, mEdit.Select, mExit.Select, mFile.Select, mFind.Select, mFindnext.Select, mFont.Select, mHelp.Select, mHelptopics.Select, mOpen.Select, mPagesetup.Select, mPaste.Select, mPrint.Select, mPrintpreview.Select, mReplace.Select, mSave.Select, mSaveas.Select, mSelectall.Select, mStatusbar.Select, mUndo.Select, mView.Select        Dim strText As String

            If sender Is mStatusbar Then            strText = "决定是否隐藏状态栏...."        ElseIf sender Is mAbout Then            strText = "您将看到我们开发小组的一些资料"        ElseIf sender Is mClear Then            strText = "清空所有内容!"        ElseIf sender Is mExit Then            strText = "退出程序!"        ElseIf sender Is mNew Then            strText = "新建一个文档,会提示保存。。。"        ElseIf sender Is mCopy Then            strText = "复制选中的内容"        ElseIf sender Is mCut Then            strText = "剪切制定的内容"        ElseIf sender Is mEdit Then            strText = "编辑菜单"        ElseIf sender Is mFile Then            strText = "文件菜单"        ElseIf sender Is mFind Then            strText = "显示查找面板。。"        ElseIf sender Is mFindnext Then            strText = "查找下一个"        ElseIf sender Is mFont Then            strText = "显示字体设置对话框"        ElseIf sender Is mOpen Then            strText = "打开菜单"        ElseIf sender Is mEdit Then            strText = "编辑菜单"        ElseIf sender Is mPagesetup Then            strText = "页面设置选项"        ElseIf sender Is mEdit Then            strText = "编辑菜单"            '.........            '........            '........

            Else            strText = String.Empty        End If

            WriteToStatusBar(strText)    End Sub

        Public Sub WriteToStatusBar(ByVal Text As String)        StatusBar1.Text = Text    End Sub

        Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click        ColorDialog1.ShowDialog()        rtbox.ForeColor = ColorDialog1.Color    End Sub    '***********************************************************************************************    '下面是关于实现查找功能    Dim MyPos As Integer '先声明一个全局变量

        Private Sub FindText(ByVal start As Integer) '创建findtext函数        Dim pos As Integer        Dim target As String        '获取用户输入的要查找的字符串        target = txtbox.Text        pos = InStr(start, rtbox.Text, target)        If pos > 0 Then  '找到了匹配字符串            MyPos = pos            rtbox.SelectionStart = MyPos - 1 '高亮显示            rtbox.SelectionLength = Len(txtbox.Text)            rtbox.Focus()        Else            MsgBox("没找到!")

            End If    End Sub

        Private Sub find_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles find.Click        FindText(1)    End Sub

        Private Sub findnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles findnext.Click        FindText(MyPos + 1)    End Sub

        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles closepanel.Click        Panel1.Visible = False    End Sub

        '*************************************************************************************************************    '下面这段程序,用作拖拽“查找面板”使用    Dim dragging As Boolean    Dim mousex As Integer    Dim mousey As Integer    Private Sub panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown        If e.Button = MouseButtons.Left Then            dragging = True            mousex = -e.X            mousey = -e.Y            Dim clipleft As Integer = Me.PointToClient(MousePosition).X - Panel1.Location.X            Dim cliptop As Integer = Me.PointToClient(MousePosition).Y - Panel1.Location.Y            Dim clipwidth As Integer = Me.ClientSize.Width - (Panel1.Width - clipleft)            Dim clipheight As Integer = Me.ClientSize.Height - (Panel1.Height - cliptop)            Cursor.Clip = Me.RectangleToScreen(New Rectangle(clipleft, cliptop, clipwidth, clipheight))            Panel1.Invalidate()        End If    End Sub

        Private Sub panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove        If dragging Then            '移动控件到新的位置            Dim MPosition As New Point()            MPosition = Me.PointToClient(MousePosition)            MPosition.Offset(mousex, mousey)            '确实控件不能离开主窗口            Panel1.Location = MPosition        End If    End Sub

        Private Sub panel1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseUp        If dragging Then            '结束拖拽            dragging = False            Cursor.Clip = Nothing            Panel1.Invalidate()        End If    End Sub    '****************************************************************************************************************

        Private Sub replace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mpreplace.Click        rtbox.Text = rtbox.Text.Replace(txtbox.Text, rpbox.Text)    End Sub

        Private Sub mFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mFind.Click        Panel1.Visible = True

        End Sub

        Private Sub mFindnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mFindnext.Click        FindText(MyPos + 1)    End Sub

        Private Sub mReplace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mReplace.Click        rtbox.Text = rtbox.Text.Replace(txtbox.Text, rpbox.Text)    End SubEnd Class

    '完。


    最新回复(0)