如何在VB6中制作一个带有“不要再问这个”或“不要再问我”复选框的MsgBox?

时间:2009-06-24 19:24:34

标签: vb6 msgbox

我之所以这样问是因为我想知道这样做的最佳做法,部分是因为我得到的最高谷歌结果是2002年的一个论坛帖子,其中的问题甚至没有得到解答。

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

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

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

提前致谢

4 个答案:

答案 0 :(得分:9)

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

我已多次在自己的应用程序中完成此操作。要考虑的一件事......假设用户选中“不再向我显示”框。在我看来,应该有一种方法来重置设置。由于消息框表单不会再次显示,我将其添加到配置表单(对于我的应用程序)。

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

答案 1 :(得分: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

对于其他所有内容,请点击链接:)

答案 2 :(得分:0)

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

除此之外,您可以使用状态栏显示通知,或者使用包含通知消息的标签,并在几秒钟后将其关闭。

答案 3 :(得分: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

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