Skip to content

使用示例

本文档提供 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 "操作成功", 2000

2. 为持久显示的弹窗命名

vb
' 推荐写法
Toast.Tag("notification").Pos(RightBottom).Show "重要通知", 0

' 不推荐写法(无法单独关闭)
Toast.Pos(RightBottom).Show "重要通知", 0

3. 使用事件监听保持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.Count

4. 合理选择显示位置

vb
' 临时提示使用右上角
Toast.Pos(RightTop).State(Success).Show "保存成功", 2000

' 重要通知使用右下角(持久显示)
Toast.Tag("important").Pos(RightBottom).State(Danger).Show "系统维护通知", 0

' 关键信息使用居中
Toast.Pos(Center).State(Danger).Show "严重错误,请立即处理", 0

5. 合理设置显示时间

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

VB6及其LOGO版权为微软公司所有