8

我问这个部分是因为我想知道这样做的最佳实践方式,部分是因为我得到的顶级谷歌结果是 2002 年的一个论坛主题,其中甚至没有回答问题。

我继承了一些 VB6 代码,并且在所述代码中有一些 MsgBox 调用,其中许多显示的消息最终用户可能会在短时间内感到非常烦人(例如“打印完成”、“添加记录”等)

我想在 MsgBox 上添加一个复选框的标准用户界面控件,说“不要再问我这个”,以便在选中并单击 OK 时,保存一个设置,让程序知道,你知道.. .永远不要再问这个了。相当标准的控制,这个想法是不言自明的。

我想知道的是在 VB6 中执行此操作的最佳实践方式是什么。有一种明显的方法可以为这些类型的 msgboxen 创建一个新表单,并在该表单上用 .Show 替换旧的 MsgBox 调用,但是 Stack Overflow 上的 VB6 专家有更好的方法吗?

提前致谢

4

4 回答 4

9

据我所知,没有其他办法。您需要使用复选框制作自己的消息框表单。当然,您还需要修改代码以存储和检索此设置(并根据设置进行适当的操作)。

我已经在自己的应用程序中多次这样做了。需要考虑的一件事....假设用户选中“不要再给我看这个”框。在我看来,应该有一种方法可以重置设置。由于消息框表单不会再次显示,我将其添加到配置表单(用于我的应用程序)。

您可能要考虑的一件事是对 MSGBOX 函数进行子类化。您可以在您的应用程序中创建一个具有类似参数列表的函数,但还有一些额外的参数。如果缺少额外参数,只需调用 vba.MsgBox (以获取标准行为)。如果你传入额外的参数,你可以调用你的新表单。

于 2009-06-24T19:33:35.843 回答
8

嗯......你不是绝对正确的人;)

从 Win2000 开始,有SHMessageBoxCheck函数可以解决问题。VB6 声明:

Private Declare Function SHMessageBoxCheck Lib "shlwapi" Alias "#185" (ByVal hWnd As Long, ByVal lpszText As String, ByVal lpszTitle As String, ByVal dwType As VbMsgBoxStyle, ByVal iDefault As Long, ByVal lpszId As String) As Long

对于其他一切,请点击链接:)

于 2009-06-24T20:30:12.140 回答
0

如果您提供这样的功能,它可能需要“打开”显示消息框。
即用户应该可以选择使用某些设置再次查看 msgbox。

取而代之的是,您可以使用状态栏来显示通知,或者使用带有通知消息的标签并在几秒钟后将其关闭。

于 2009-06-24T19:32:45.063 回答
0

这是我的肮脏和肮脏的解决方案:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
myfile = Workbooks.Application.ActiveWorkbook.Path & "\noprompt.txt"
If Dir(myfile) <> "" Then Exit Sub
exportData = MsgBox("Export data?" & vbCrLf & "Select Cancel (or × top right) to prevent this prompt from displaying again.", vbYesNoCancel, "Close Workbook")
If exportData = vbYes Then
    Call ExportValues 'a separate function...
ElseIf exportData = vbCancel Then
    'create file noprompt.txt
    Open myfile For Output As #1
    Write #1, "Delete this file to restore prompt to Export Data when workbook is closed."
    Close #1
    Exit Sub
ElseIf exportData = vbNo Then
    Exit Sub

End If


End Sub

我的应用程序的文档说明删除文件会恢复提示。

于 2015-09-11T20:46:57.417 回答