Как сделать MsgBox с флажком «Не спрашивать больше» или «Больше не спрашивать» в VB6? - PullRequest
8 голосов
/ 24 июня 2009

Я спрашиваю это отчасти потому, что хочу знать наилучший практический способ сделать это, а отчасти потому, что лучшим результатом Google, который я получил, была ветка форума 2002 года, в которой на вопрос даже не было ответа.

Я унаследовал некоторый код VB6, и в указанном коде есть некоторые вызовы MsgBox, многие из которых отображают сообщения, которые конечные пользователи, вероятно, найдут очень раздражающими через короткое время (например, «Печать завершена», «Запись добавлена» и т. Д.). )

Я хотел бы добавить стандартное управление пользовательским интерфейсом для флажка на MsgBox, говорящего «Не спрашивайте меня об этом снова», чтобы при установке флажка и нажатии «ОК» сохранялась настройка, сообщающая программе, что вы знаю ... никогда больше не спрашивать. Довольно стандартный контроль, идея довольно понятна.

Я хотел бы знать, каков наилучший способ 1008 * сделать это в VB6. Существует очевидный способ создания новой формы для этого типа msgboxen и замены старого вызова MsgBox на .Show для этой формы, но есть ли у гуру VB6 в переполнении стека лучший способ?

Заранее спасибо

Ответы [ 4 ]

9 голосов
/ 24 июня 2009

Насколько я знаю, другого пути нет. Вы должны сделать свою собственную форму сообщения с флажком. Конечно, вам также нужно изменить код, чтобы сохранить и извлечь этот параметр (и действовать соответствующим образом в зависимости от параметра).

Я делал это в своем приложении много раз. Надо подумать ... предположим, что пользователь установил флажок "не показывать мне это снова". На мой взгляд, должен быть способ сброса настроек. Поскольку форма окна сообщения больше не будет отображаться, я добавил ее в форму конфигурации (для моего приложения).

Одна вещь, которую вы можете рассмотреть, это подклассификация функции MSGBOX. Вы можете создать функцию в вашем приложении, которая имеет аналогичный список параметров, но с парой дополнительных. Если дополнительные параметры отсутствуют, просто вызовите vba.MsgBox (чтобы получить стандартное поведение). Если вы передадите дополнительные параметры, вы можете вместо этого вызвать новую форму.

8 голосов
/ 25 июня 2009

Ну ... Вы не совсем правильные парни;)

Начиная с 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

Для всего остального перейдите по ссылке:)

0 голосов
/ 11 сентября 2015

Это было мое грязное решение:

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

Документация для моего приложения объясняет, что удаление файла восстанавливает подсказку.

0 голосов
/ 24 июня 2009

Если вы предоставляете такую ​​функцию, может потребоваться «включение» отображения окна сообщения.
то есть пользователь должен иметь возможность снова увидеть msgbox, используя некоторые настройки.

Вместо этого вы можете использовать строку состояния для отображения уведомлений ИЛИ иметь ярлык с уведомлениями и отключить его через несколько секунд.

...