Pourquoi mon code fonctionne lorsque j'utilise un MessageBox.Show () entre les deux, et ne fonctionne pas sans elle?

StackOverflow https://stackoverflow.com/questions/909465

  •  05-09-2019
  •  | 
  •  

Question

J'EMBEDDED le navigateur Web de .NET sous une forme qui a d'autres boutons.

L'application que je développe ne pas utiliser un clavier, mais utilise un écran tactile. Ainsi, il utilise en fait la souris uniquement. Pour faire défiler vers le bas le navigateur Web, j'ai fait deux boutons personnalisés. Lorsque je clique sur ces boutons, il doit envoyer un coup clé « PageDown » dans le navigateur et le navigateur doit faire défiler vers le bas.

Ainsi, le code de l'événement click est comme suit:

        theForm.Activate();
        Application.DoEvents();
        theBrowser.Focus();
        Application.DoEvents();
        SendKeys.Send(key);

Où theForm 'est la forme et 'theBrowser' est l'instance du navigateur.

Alors, quand je clique sur le bouton, rien ne se passe. Quand je clique sur le premier navigateur, puis cliquez sur le bouton, il fonctionne. Mais im lui donnant le focus droit? Je lui ai donné l'application assez d'espace pour mettre l'accent?

Mais maintenant ce que je pense est étrange. Quand je mets un MessageBox.Show ( « BONJOUR »); dans le code, comme ceci:

    theForm.Activate();
    Application.DoEvents();
    theBrowser.Focus();
    MessageBox.Show("HELLO");
    Application.DoEvents();
    SendKeys.Send(key);

... ça ne fonctionne quand je clique immédiatement le bouton.

La question est: Pourquoi ce code fonctionne pas quand je quitte le MessageBox.Show (), mais fait quand j'utiliser le MessageBox.Show ()

espère que vous pouvez aider, merci à l'avance ...

Était-ce utile?

La solution

Pour moi, cela ressemble à la mauvaise façon de se passer à ce sujet.

Essayez quelque chose le long des lignes de cette échantillon C de ou cette

Autres conseils

Sans entrer dans si votre approche est correcte. (Et je soupçonne que ce n'est pas).

Je jouer que vous avez une condition de course. Ce qui signifie que le contrôle du navigateur a besoin de plus de temps pour charger et répondre aux événements que vous le laisser.

Alors, quand vous faites Message.Show, tout à coup le fil que vous envoyez des événements est bloqué et il est de laisser le contrôle du navigateur complet ou autre chose initialisation de.

Il est difficile de savoir à partir de votre question de savoir si vous utilisez le mobile, ou de bureau régulier car il y a de meilleures approches pour faire face à toucher. Regardez Window7 pour Api Multi Touch ou WPF 4.0 (qui est partagée par la surface tactile aswell SDK).

L'espoir qui aide. Ariel

Il se peut que le contrôle du navigateur est toujours en chargement d'un document et la boîte de message, il donne suffisamment de temps pour terminer. Si oui, attendez que la propriété du navigateur IsBusy est faux ou utiliser l'événement DocumentCompleted.

Je ne sais pas, mais en général dans mon expérience, il est une mauvaise idée d'essayer de changer la mise au point par programme comme celui-ci, vous finissez toujours sur une chasse au bug. Il y a beaucoup de façons d'obtenir des fenêtres pour faire défiler, alors peut-être vous devriez essayer autre chose? Par exemple JavaScript dans le navigateur Web peut faire défiler la fenêtre efficacement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top