Visual Basic创建工具栏

记事本是Windows中最常用的应用程序之一,其程序小、使用方便,是用户编辑文本的有力工具。编写本程序比较简单,且其中的大部分问题也都陆续介绍过。

建立好的用户界面,如图7.16所示。窗体界面中应包括:菜单、工具栏、公共对话框及一个文本框。这里并没有使用标准的TextBox控件,使用的是ActiveX中的RichTextBox控件(Microsoft Rich Textbox Control 6.0),RichTextBox控件不仅允许输入和编辑文本,同时还提供了标准TextBox控件未具有的、更高级的指定格式的许多功能,如改变部分文本字体、颜色、以及创建上标和下标、调整段落的格式等。

为了能动态显示已经打开文件的历史记录,需在文件菜单条中添加5个Visible属性为False的子菜单数组mnuFileH(0)~mnuFileH(4),分别表示分隔线及4个历史记录。然后建立一个通用过程,以便在文件打开、保存时调用:

Dim num As Integer

Private Sub Filehide()

mnuFileH(0).Visible = True

num = num + 1

If num > 4 Then

num = 1

mnuFileH(num).Visible = True

mnuFileH(num).Caption = CommonDialog1.FileName

Else

mnuFileH(num).Visible = True

mnuFileH(num).Caption = CommonDialog1.FileName

End If

End Sub

图7.16 记事本的设计界面

为了能够使文本框在任何时候都能充满窗口,应在窗体的Resize中设置RichTextBox1的尺寸,并将其ScrollBars属性值设为3-rtfBoth。

Private Sub Form_Resize()

With RichTextBox1

.Top = Toolbar1.Height

.Left = 0

.Height = Form1.ScaleHeight - Toolbar1.Height

.Width = Form1.ScaleWidth

End With

End Sub

文件菜单中新建、打开、保存、另存为以及退出的代码如下:

Private Sub mnuFileN_Click(Index As Integer)

Dim fso As New FileSystemObject, fil As TextStream

Select Case Index

Case 0

RichTextBox1.Text = ""

Form1.Caption = "未命名"

Case 1

CommonDialog1.DialogTitle = "打开"

CommonDialog1.ShowOpen

fname = CommonDialog1.FileName

If fname <> "" Then

RichTextBox1.Text = ""

Set fil = fso.OpenTextFile(fname)

b = ""

b = fil.ReadAll

RichTextBox1.Text = Left(b, 20000)

End If

Form1.Caption = fname

Call Filehide

Case 2

CommonDialog1.DialogTitle = "保存"

If Form1.Caption = "未命名" Or Form1.Caption = "" Then

CommonDialog1.ShowSave

fname = CommonDialog1.FileName

Call Filehide

Else

fname = Form1.Caption

End If

If fname <> "" Then

Set fil = fso.CreateTextFile(fname, True)

fil.Write RichTextBox1.Text

Form1.Caption = fname

End If

Case 3

CommonDialog1.DialogTitle = "另存为"

CommonDialog1.ShowSave

fname = CommonDialog1.FileName

If fname <> "" Then

Set fil = fso.CreateTextFile(fname, True)

fil.Write RichTextBox1.Text

Form1.Caption = fname

Call Filehide

End If

End Select

RichTextBox1.SetFocus

End Sub

Private Sub mnuFileExit_Click() '退出

Unload Me

End Sub

单击"文件"菜单历史记录选项的过程代码为:

Private Sub mnuFileH_Click(Index As Integer)

Dim fso As New FileSystemObject, fil As TextStream

fname = mnuFileH(Index).Caption

RichTextBox1.Text = ""

Set fil = fso.OpenTextFile(fname)

b = ""

b = fil.ReadAll

RichTextBox1.Text = Left(b, 20000)

Form1.Caption = fname

End Sub

"编辑"菜单各选项的单击事件代码为:

Private Sub mnuEditT_Click(Index As Integer)

Select Case Index

Case 0 '剪切

Clipboard.SetText RichTextBox1.SelRTF

RichTextBox1.SelRTF = ""

Case 1 '复制

Clipboard.SetText RichTextBox1.SelRTF

Case 2 '粘贴

RichTextBox1.SelRTF = Clipboard.GetText

Case 3 '清除

RichTextBox1.SelRTF = ""

Case 5 '字体

On Error Resume Next

CommonDialog1.ShowFont

If Err = cdlCancel Then

Else

RichTextBox1.SelFontName = CommonDialog1.FontName

RichTextBox1.SelFontSize = CommonDialog1.FontSize

RichTextBox1.SelBold = CommonDialog1.FontBold

RichTextBox1.SelItalic = CommonDialog1.FontItalic

RichTextBox1.SelUnderline = CommonDialog1.FontUnderline

RichTextBox1.SelStrikeThru = CommonDialog1.FontStrikethru

RichTextBox1.SelColor = CommonDialog1.Color

End If

Case 7 '全选

RichTextBox1.SelStart = 0

RichTextBox1.SelLength = Len(RichTextBox1.Text)

End Select

End Sub

"帮助"菜单的代码为:

Private Sub mnuHelpH_Click(Index As Integer)

Select Case Index

Case 0

CommonDialog1.ShowHelp

Case 2

MsgBox "Notpad 1.0 demo,2001,8", , "版本信息"

End Select

End Sub

工具栏中各选项代码为:

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

n = Button.Index

Select Case n

Case 2

Call mnuFileN_Click(0)

Case 3

Call mnuFileN_Click(1)

Case 4

Call mnuFileN_Click(2)

Case 6

Call mnuEditT_Click(0)

Case 7

Call mnuEditT_Click(1)

Case 8

Call mnuEditT_Click(2)

Case 10

RichTextBox1.SelBold = Not RichTextBox1.SelBold

Case 11

RichTextBox1.SelItalic = Not RichTextBox1.SelItalic

Case 12

RichTextBox1.SelUnderline = Not RichTextBox1.SelUnderline

End Select

End Sub

相关推荐
是娇娇公主~3 小时前
C++ 中 std::deque 的原理?它内部是如何实现的?
开发语言·c++·stl
SuperEugene3 小时前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
xuxie994 小时前
N11 ARM-irq
java·开发语言
wefly20175 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
luanma1509805 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php
寂静or沉默5 小时前
2026最新Java岗位从P5-P7的成长面试进阶资源分享!
java·开发语言·面试
kyriewen116 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript
娇娇yyyyyy6 小时前
QT编程(18): Qt QItemSelectionModel介绍
开发语言·qt
豆豆的java之旅7 小时前
软考中级软件设计师 数据结构详细知识点(含真题+练习题,可直接复习)
java·开发语言·数据结构
sthnyph7 小时前
QT开发:事件循环与处理机制的概念和流程概括性总结
开发语言·qt