2010-03-19 12 views
1

donc deux ou trois questions idiotes:MS Access 2003 - Message Box: Comment puis-je répondre "ok" automatiquement par le code

Si j'inclure dans un événement:

MsgBox " ", vbOkOnly, "This little message box" 

pourrais-je alors avec quelques plus de code tourner autour et 'cliquez sur le bouton OK. Donc, en gros, le message boox apparaît automatiquement, puis disparaît automatiquement?

Je sais que stupide parce que vous voulez savoir, pourquoi voulez-vous la boîte de message, puis .....

bien a) je veux juste savoir si vous pouvez le faire, et ce serait la commande

b) J'ai des formes de base (objets de forme) qui sont visibles lorsque la boîte de message apparaît. Mais sans avoir la boîte de message là, il n'y a pas d'interruption temporaire du code en attendant que le bouton soit cliqué, et par conséquent ces jolis objets d'image rendus visibles prennent effet sur le formulaire.

Donc, je n'ai vraiment pas besoin de la boîte de message, juste la perturbation de temp qui montre les objets.

Merci!

Répondre

5

Un MsgBox est modal. Il n'y a que deux paramètres liés à la Modality

  • ApplicationModal
  • SystemModal

Donc, si le Msgbox est relevé par votre application actuelle, aucun code courront jusqu'à ce que vous cliquez sur un bouton dans la boîte de message.

La manière de contourner ceci est de concevoir votre propre boîte de message en utilisant un formulaire. Vous pouvez le faire apparaître et le garder, puis vous pouvez cliquer sur n'importe quel bouton.

Si vous voulez un délai, vous pouvez utiliser l'API Win pour dormir

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Private Sub ApiSleep(SleepMilliseconds as Long) 
    Sleep SleepMilliseconds 
End Sub 
-1
Sendkeys "~",false 

rejeter le msgbox (en supposant qu'il a le focus)

Je pense que vous êtes à la recherche de la peindre des événements, ou forcer un formulaire de rafraîchissement pour réaliser ce que vous voulez réellement faire!

Edit: Ah putain, ouais, parce que c'est modal le code est suspendu ... d'oh! Comme suggéré, écrivez le vôtre, ou vous devrez lancer quelque chose dans un autre thread pour le faire, et je n'ai aucune idée de comment faire du multi threading dans MS Access!

Second Edit: Avez-vous regardé Application.Echo False de suspendre et Application.Echo True pour reprendre la peinture mise en page?

+3

Sendkeys doit être évité et ne fonctionne pas avec Vista. – Fionnuala

+0

+ 1 merci, n'avait pas entendu parler de Sendkeys ne fonctionne pas dans Vista! Ça fait longtemps que j'ai développé quelque chose à l'intérieur d'Access! – Doogie

+1

Cela ne fonctionnera pas après une instruction MsgBox car le code y fait une pause et ne passera jamais à l'instruction SendKeys jusqu'à ce que MsgBox soit fermé. –

1

Je sais que cela a demandé un certain temps il y a, mais la solution que je l'utilise est ceci:

CreateObject("WScript.Shell").PopUp "Save Successful!", 1, "Save" 

Comment cela fonctionne est une boîte de message est affiché comme un normal serait cependant il a sa propre horloge système qui signifie que vous pouvez fermer automatiquement la boîte de message sans même faire quoi que ce soit.

Le chiffre 1 indique le nombre de secondes que vous souhaitez afficher avant la fermeture automatique.

Je l'utilise pour les procédures de sauvegarde car c'est une notification utile que quelque chose a sauvé mais ne nécessite pas que l'utilisateur clique réellement sur "OK".

Quoi qu'il en soit c'est mes deux centimes de valeur d'une réponse. J'espère que cela aide quelqu'un d'autre aussi!