使用示例
本文档提供 cToast 组件的各种使用场景示例代码。
目录
基础示例
示例1:最简单的弹窗
vb
' 默认居中显示,3秒后自动关闭
With New cToast
.Show "欢迎使用 VBMan!"
End With示例2:指定显示时间
vb
' 1秒后自动关闭
With New cToast
.Show "快速提示", 1000
End With
' 持久显示(不自动关闭)
With New cToast
.Show "重要通知,请关注", 0
End With示例3:自定义标题
vb
With New cToast
.Show "文件保存成功", 2000, "成功"
End With
With New cToast
.Show "网络连接失败", 5000, "错误"
End With位置控制
示例1:9种位置对比
vb
Dim Toast As New cToast
' 左上
Toast.Pos(LeftTop).State(Info).Show "左上角", 0, "LeftTop"
' 左中
Toast.Pos(LeftCenter).State(Success).Show "左中覆盖", 0, "LeftCenter"
' 左下
Toast.Pos(LeftBottom).State(Warning).Show "左下角", 0, "LeftBottom"
' 居上
Toast.Pos(CenterTop).State(Danger).Show "居上堆叠", 0, "CenterTop"
' 居中
Toast.Pos(Center).State(Info).Show "居中覆盖", 0, "Center"
' 居下
Toast.Pos(CenterBottom).State(Success).Show "居下堆叠", 0, "CenterBottom"
' 右上
Toast.Pos(RightTop).State(Warning).Show "右上角", 0, "RightTop"
' 右中
Toast.Pos(RightCenter).State(Danger).Show "右中覆盖", 0, "RightCenter"
' 右下
Toast.Pos(RightBottom).State(Info).Show "右下角", 0, "RightBottom"示例2:常用位置组合
vb
Dim Toast As New cToast
' 右上角成功提示
Toast.Pos(RightTop).State(Success).Show "操作成功", 2000
' 右下角警告提示
Toast.Pos(RightBottom).State(Warning).Show "请注意", 3000
' 居中错误提示
Toast.Pos(Center).State(Danger).Show "发生错误", 4000状态和主题
示例1:4种状态
vb
Dim Toast As New cToast
' 信息提示
Toast.State(Info).Show "这是一条信息提示", 3000
' 成功提示
Toast.State(Success).Show "操作成功完成!", 2000
' 警告提示
Toast.State(Warning).Show "请注意此操作", 3000
' 危险提示
Toast.State(Danger).Show "操作失败,请重试", 4000示例2:深色主题
vb
Dim Toast As New cToast
' 深色主题 + 信息
Toast.Theme(Dark).State(Info).Show "深色信息提示", 3000
' 深色主题 + 成功
Toast.Theme(Dark).State(Success).Show "深色成功提示", 2000
' 深色主题 + 警告
Toast.Theme(Dark).State(Warning).Show "深色警告提示", 3000
' 深色主题 + 危险
Toast.Theme(Dark).State(Danger).Show "深色危险提示", 4000示例3:混合使用
vb
Dim Toast As New cToast
' 浅色 + 成功 + 右上
Toast.Theme(Light).State(Success).Pos(RightTop).Show "保存成功", 2000
' 深色 + 警告 + 右下
Toast.Theme(Dark).State(Warning).Pos(RightBottom).Show "网络不稳定", 0
' 深色 + 危险 + 居中
Toast.Theme(Dark).State(Danger).Pos(Center).Show "严重错误", 0堆叠管理
示例1:自动堆叠(顶部顺序)
vb
Dim Toast As New cToast
Toast.Pos(RightTop).State(Info)
Toast.Show "第一条消息", 0 ' 自动索引0(最上)
Toast.Show "第二条消息", 0 ' 自动索引1
Toast.Show "第三条消息", 0 ' 自动索引2
Toast.Show "第四条消息", 0 ' 自动索引3
Toast.Show "第五条消息", 0 ' 自动索引4(最下)示例2:自动堆叠(底部倒序)
vb
Dim Toast As New cToast
Toast.Pos(RightBottom).State(Warning)
Toast.Show "第一条(最下)", 0 ' 自动索引0(最下)
Toast.Show "第二条", 0 ' 自动索引1
Toast.Show "第三条", 0 ' 自动索引2
Toast.Show "第四条", 0 ' 自动索引3
Toast.Show "第五条(最上)", 0 ' 自动索引4(最上)示例3:手动指定堆叠位置
vb
Dim Toast As New cToast
' 手动指定每个位置
Toast.Pos(RightTop).InstIndex(0).Show "第1条", 0
Toast.Pos(RightTop).InstIndex(1).Show "第2条", 0
Toast.Pos(RightTop).InstIndex(2).Show "第3条", 0
Toast.Pos(RightTop).InstIndex(3).Show "第4条", 0示例4:混合状态堆叠
vb
Dim Toast As New cToast
Toast.Pos(CenterTop)
Toast.State(Info).Show "信息提示", 0 ' 自动索引0
Toast.State(Success).Show "操作成功", 0 ' 自动索引1
Toast.State(Warning).Show "注意警告", 0 ' 自动索引2
Toast.State(Danger).Show "错误提示", 0 ' 自动索引3
Toast.State(Info).Show "再次提示", 0 ' 自动索引4弹窗管理
示例1:命名和单独关闭
vb
Dim Toast As New cToast
' 显示多个弹窗并命名
Toast.Tag("msg1").Pos(RightTop).State(Success).Show "消息1", 0
Toast.Tag("msg2").Pos(RightTop).State(Warning).Show "消息2", 0
Toast.Tag("msg3").Pos(RightBottom).State(Danger).Show "消息3", 0
' 单独关闭指定弹窗
Toast.CloseMe "msg1"
' 检查是否成功关闭
If Toast.Exists("msg1") Then
Debug.Print "弹窗还存在"
Else
Debug.Print "弹窗已关闭"
End If示例2:批量管理
vb
Dim Toast As New cToast
' 显示多个弹窗
Toast.Pos(RightTop).State(Success).Show "成功1", 0
Toast.Pos(RightTop).State(Success).Show "成功2", 0
Toast.Pos(RightBottom).State(Warning).Show "警告1", 0
Toast.Pos(RightBottom).State(Warning).Show "警告2", 0
' 查看当前数量
Debug.Print "当前弹窗数: " & Toast.Count ' 输出: 4
' 关闭所有弹窗
Toast.CloseAll
' 再次查看数量
Debug.Print "当前弹窗数: " & Toast.Count ' 输出: 0示例3:遍历所有弹窗
vb
Dim Toast As New cToast
Dim Keys As Collection
Dim Key As Variant
' 显示一些弹窗
Toast.Tag("msg1").Pos(RightTop).Show "消息1", 0
Toast.Tag("msg2").Pos(RightTop).Show "消息2", 0
Toast.Tag("msg3").Pos(RightBottom).Show "消息3", 0
' 获取所有弹窗名称
Set Keys = Toast.ActiveKeys
' 遍历并输出
For Each Key In Keys
Debug.Print "活动弹窗: " & Key
Next Key
' 输出:
' 活动弹窗: msg1
' 活动弹窗: msg2
' 活动弹窗: msg3事件监听
示例1:监听数量变化
vb
Private WithEvents Toast As cToast
Private Sub Form_Load()
Set Toast = New cToast
End Sub
Private Sub btnShow_Click()
Toast.Pos(RightTop).State(Info).Show "新消息", 0
End Sub
Private Sub Toast_OnToastCountChange(ByVal TagName As String, ByVal IsDelete As Boolean, ByVal CurrentCount As Long)
' 更新UI显示
lblCount.Caption = "当前活动弹窗: " & CurrentCount
' 更新列表
RefreshList
' 记录日志
If IsDelete Then
Debug.Print "弹窗 [" & TagName & "] 已关闭,剩余 " & CurrentCount & " 个"
Else
Debug.Print "弹窗 [" & TagName & "] 已创建,共 " & CurrentCount & " 个"
End If
End Sub示例2:监听批量关闭
vb
Private WithEvents Toast As cToast
Private Sub Form_Load()
Set Toast = New cToast
End Sub
Private Sub btnCloseAll_Click()
Toast.CloseAll
End Sub
Private Sub Toast_OnCloseAll(ByVal ClosedCount As Long)
' 批量关闭后刷新UI
RefreshList
' 显示提示
If ClosedCount > 0 Then
MsgBox "已关闭 " & ClosedCount & " 个弹窗", vbInformation
Else
MsgBox "没有活动弹窗", vbInformation
End If
End Sub示例3:完整的事件监听示例
vb
Private WithEvents Toast As cToast
Private Sub Form_Load()
Set Toast = New cToast
UpdateUI
End Sub
Private Sub btnAdd_Click()
Toast.Tag("msg" & Toast.Count + 1).Pos(RightTop).State(Info).Show "新消息 " & Toast.Count + 1, 0
End Sub
Private Sub btnCloseAll_Click()
Toast.CloseAll
End Sub
Private Sub Toast_OnToastCountChange(ByVal TagName As String, ByVal IsDelete As Boolean, ByVal CurrentCount As Long)
UpdateUI
UpdateList
End Sub
Private Sub Toast_OnCloseAll(ByVal ClosedCount As Long)
UpdateUI
UpdateList
If ClosedCount > 0 Then
Debug.Print "批量关闭了 " & ClosedCount & " 个弹窗"
End If
End Sub
Private Sub UpdateUI()
lblCount.Caption = "当前弹窗: " & Toast.Count
btnCloseAll.Enabled = (Toast.Count > 0)
End Sub
Private Sub UpdateList()
Dim Keys As Collection
Dim Key As Variant
lstToasts.Clear
Set Keys = Toast.ActiveKeys
For Each Key In Keys
lstToasts.AddItem CStr(Key)
Next Key
End Sub实际应用场景
场景1:表单提交成功提示
vb
Private Sub btnSave_Click()
' 保存数据
If SaveData() Then
With New cToast
.State(Success).Show "数据保存成功!", 2000, "成功"
End With
Else
With New cToast
.State(Danger).Show "保存失败,请重试", 3000, "错误"
End With
End If
End Sub场景2:后台任务进度通知
vb
Private Sub btnStartTask_Click()
Dim taskId As Long
' 开始后台任务
taskId = StartBackgroundTask()
' 显示任务开始通知(持久显示)
With New cToast
.Tag("task" & taskId).Pos(RightTop).State(Info).Show "任务 " & taskId & " 开始执行", 0, "任务"
End With
' ... 后续任务完成时 ...
End Sub
Private Sub OnTaskComplete(ByVal taskId As Long)
' 关闭任务通知
Dim Toast As New cToast
Toast.CloseMe "task" & taskId
' 显示完成通知
With New cToast
.State(Success).Show "任务 " & taskId & " 已完成", 3000, "完成"
End With
End Sub场景3:系统消息通知中心
vb
Private WithEvents Toast As cToast
Private notificationCount As Long
Private Sub Form_Load()
Set Toast = New cToast
notificationCount = 0
End Sub
Private Sub OnNewNotification(ByVal msg As String, ByVal level As EnumState)
' 增加计数
notificationCount = notificationCount + 1
' 显示通知(右侧堆叠,持久显示)
Toast.Tag("notif_" & notificationCount).Pos(RightTop).State(level).Show msg, 0, "通知"
' 更新图标
UpdateNotificationIcon notificationCount
End Sub
Private Sub btnClearNotifications_Click()
Toast.CloseAll
notificationCount = 0
UpdateNotificationIcon 0
End Sub
Private Sub Toast_OnCloseAll(ByVal ClosedCount As Long)
notificationCount = 0
UpdateNotificationIcon 0
End Sub场景4:操作日志实时显示
vb
Private WithEvents Toast As cToast
Private logCount As Long
Private Sub Form_Load()
Set Toast = New cToast
logCount = 0
End Sub
Private Sub AddLog(ByVal msg As String, ByVal level As EnumState)
logCount = logCount + 1
' 日志从右上开始堆叠,自动管理数量(最多显示10条)
If logCount > 10 Then
Toast.CloseMe "log_" & (logCount - 10)
End If
Toast.Tag("log_" & logCount).Pos(RightTop).State(level).Show msg, 5000, "日志"
End Sub
Private Sub btnTest_Click()
AddLog "开始测试", Info
AddLog "步骤1完成", Success
AddLog "步骤2完成", Success
AddLog "发现警告", Warning
AddLog "测试完成", Info
End Sub场景5:多状态操作反馈
vb
Private Sub btnProcess_Click()
Dim Toast As New cToast
' 步骤1:验证
Toast.Pos(RightTop).State(Info).Show "正在验证数据...", 0, "处理中"
If ValidateData() Then
Toast.CloseMe "验证提示"
Toast.State(Success).Show "验证通过", 2000
' 步骤2:处理
Toast.State(Info).Show "正在处理数据...", 0, "处理中"
If ProcessData() Then
Toast.CloseMe "处理提示"
Toast.State(Success).Show "处理完成", 2000, "成功"
Else
Toast.CloseMe "处理提示"
Toast.State(Danger).Show "处理失败", 3000, "错误"
End If
Else
Toast.CloseMe "验证提示"
Toast.State(Danger).Show "验证失败", 3000, "错误"
End If
End Sub场景6:网络状态监控
vb
Private WithEvents Toast As cToast
Private isOnline As Boolean
Private Sub Form_Load()
Set Toast = New cToast
isOnline = True
CheckNetworkStatus
End Sub
Private Sub Timer1_Timer()
CheckNetworkStatus
End Sub
Private Sub CheckNetworkStatus()
Dim currentStatus As Boolean
currentStatus = PingServer()
' 状态变化时显示通知
If currentStatus <> isOnline Then
isOnline = currentStatus
If isOnline Then
' 网络恢复
Toast.Pos(Center).State(Success).Show "网络已恢复连接", 3000, "网络状态"
Else
' 网络断开(持久显示)
Toast.Tag("offline").Pos(Center).State(Danger).Show "网络连接已断开", 0, "网络状态"
End If
End If
End Sub
Private Sub OnNetworkReconnected()
' 关闭断网通知
Toast.CloseMe "offline"
End Sub场景7:文件操作进度
vb
Private WithEvents Toast As cToast
Private Sub btnCopy_Click()
Dim fileList As Collection
Dim fileName As Variant
Set fileList = GetSelectedFiles()
' 开始复制
Toast.Tag("copy_progress").Pos(RightBottom).State(Info).Show "开始复制 " & fileList.Count & " 个文件", 0, "复制"
Dim i As Long
i = 1
For Each fileName In fileList
CopyFile fileName, "D:\Backup\"
' 更新进度
Toast.CloseMe "copy_progress"
Toast.State(Info).Show "正在复制 (" & i & "/" & fileList.Count & ")...", 0, "复制"
i = i + 1
Next fileName
' 完成
Toast.CloseMe "copy_progress"
Toast.State(Success).Show "复制完成!共 " & fileList.Count & " 个文件", 3000, "完成"
End Sub场景8:一键满屏演示
vb
Private Sub Command1_Click()
Dim Toast As New cToast
' Center 系列(使用 FToastCenter)
Toast.Pos(Center).State(Info).Theme(Light).Tag("center_info").Show "居中覆盖", 0, "Center"
Toast.Pos(CenterTop).State(Success).Tag("ctop_1").Show "居上第1条", 0, "CenterTop"
Toast.Pos(CenterTop).State(Warning).Tag("ctop_2").Show "居上第2条", 0, "CenterTop"
Toast.Pos(CenterBottom).State(Danger).Tag("cbottom_1").Show "居下第1条", 0, "CenterBottom"
Toast.Pos(CenterBottom).State(Info).Tag("cbottom_2").Show "居下第2条", 0, "CenterBottom"
' Left 系列(使用 FToastDrawer)
Toast.Pos(LeftTop).State(Success).Theme(Light).Tag("ltop_1").Show "左上堆叠", 0, "LeftTop"
Toast.Pos(LeftTop).State(Warning).Tag("ltop_2").Show "左上堆叠", 0, "LeftTop"
Toast.Pos(LeftBottom).State(Info).Tag("lbottom_1").Show "左下堆叠", 0, "LeftBottom"
Toast.Pos(LeftCenter).State(Warning).Tag("lcenter").Show "左中覆盖", 0, "LeftCenter"
' Right 系列(使用 FToastDrawer)
Toast.Pos(RightTop).State(Info).Theme(Light).Tag("rtop_1").Show "右上堆叠", 0, "RightTop"
Toast.Pos(RightTop).State(Success).Tag("rtop_2").Show "右上堆叠", 0, "RightTop"
Toast.Pos(RightBottom).State(Danger).Tag("rbottom_1").Show "右下堆叠", 0, "RightBottom"
Toast.Pos(RightCenter).State(Success).Tag("rcenter").Show "右中覆盖", 0, "RightCenter"
End Sub最佳实践
1. 使用 With 语句简化代码
vb
' 推荐写法
With New cToast
.Pos(RightTop).State(Success).Show "操作成功", 2000
End With
' 不推荐写法
Dim t As cToast
Set t = New cToast
t.Pos RightTop
t.State Success
t.Show "操作成功", 20002. 为持久显示的弹窗命名
vb
' 推荐写法
Toast.Tag("notification").Pos(RightBottom).Show "重要通知", 0
' 不推荐写法(无法单独关闭)
Toast.Pos(RightBottom).Show "重要通知", 03. 使用事件监听保持UI同步
vb
' 推荐写法
Private WithEvents Toast As cToast
Private Sub Toast_OnToastCountChange(ByVal TagName As String, ByVal IsDelete As Boolean, ByVal CurrentCount As Long)
lblCount.Caption = CurrentCount
End Sub
' 不推荐写法(需要手动更新)
Toast.Show "消息"
lblCount.Caption = Toast.Count4. 合理选择显示位置
vb
' 临时提示使用右上角
Toast.Pos(RightTop).State(Success).Show "保存成功", 2000
' 重要通知使用右下角(持久显示)
Toast.Tag("important").Pos(RightBottom).State(Danger).Show "系统维护通知", 0
' 关键信息使用居中
Toast.Pos(Center).State(Danger).Show "严重错误,请立即处理", 05. 合理设置显示时间
vb
' 快速反馈:1-2秒
Toast.State(Success).Show "操作成功", 1500
' 普通提示:3-5秒
Toast.State(Info).Show "数据已更新", 3000
' 警告提示:5-8秒
Toast.State(Warning).Show "请注意此操作的影响", 5000
' 重要通知:持久显示
Toast.State(Danger).Show "服务器将在10分钟后重启", 0