Wie kommt mein Code funktioniert, wenn ich einen MessageBox.Show () dazwischen verwenden, und funktioniert nicht ohne Lizenzschlüssel?

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

  •  05-09-2019
  •  | 
  •  

Frage

I .NET des Web-Browsers in eine Form eingebettet, die einige andere Tasten hat.

Die Anwendung, die ich entwickle verwendet keine Tastatur, sondern verwendet einen Touchscreen. So verwendet er eigentlich nur mit der Maus. Um den Web-Browser nach unten scrollen, machte ich zwei-Buttons. Als ich diese Schaltflächen klicken, sollte es eine „Bild ab“ Tastenhub an den Browser senden, und sollte der Browser nach unten scrollen.

So ist der Code auf dem Click-Ereignis wird wie folgt:

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

Wo theForm 'ist die Form und 'theBrowser' ist die Browser-Instanz.

Also, wenn ich auf die Schaltfläche klicken, passiert nichts. Als ich zum ersten Mal auf dem Browser und klicken Sie dann auf die Schaltfläche klicken, funktioniert es. Aber im gibt es richtig konzentrieren? Und ich gab den Antrag genügend Platz um den Fokus zu setzen?

Aber jetzt, was ich denke, ist seltsam. Wenn habe ich eine MessageBox.Show ( „hallo“); in dem Code wie folgt:

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

... es sofort funktioniert, wenn ich auf die Schaltfläche klicken.

Die Frage ist also: Warum dieser Code nicht funktioniert, wenn ich die MessageBox.Show verlassen (), aber tut, wenn ich die MessageBox.Show tun verwenden ()

Hoffe, dass Sie helfen können, Dank im Voraus ...

War es hilfreich?

Lösung

Für mich sieht aus wie der falsche Weg, um dies geht zu werden.

Versuchen Sie etwas entlang der Linien dieser C ++ Probe oder das

Andere Tipps

Ohne in, ob Ihr Ansatz richtig ist. (Und ich vermute, dass es nicht ist).

Ich würde spielen, dass Sie eine Race-Bedingung haben. Was bedeutet, dass die Browser-Steuerung mehr Zeit, um Ereignisse zu laden muss und darauf zu reagieren, als Sie es im Stich gelassen.

So

Wenn Sie Message.Show tun, plötzlich der Faden, der Sie die Ereignisse senden gesperrt und es ist die Vermietung der Browser die Komplettierung der Steuerung INTIALIZING oder etwas anderes.

Es ist schwer, aus Ihrer Frage zu wissen, ob Sie auf Mobil ausführen oder normalen Desktop, weil es bessere Ansätze mit Kontakt umgehen sind. Schauen Sie sich Window7 Api für Multi-Touch oder WPF 4.0 (die von Surface Touch-SDK aswell geteilt wird).

Ich hoffe, das hilft. Ariel

Es kann sein, dass der Browser-Steuerung noch ein Dokument wird geladen und das Meldungsfeld gibt es genug Zeit zu beenden. Wenn ja, warten Sie, bis der IsBusy Eigenschaft des Browsers falsch ist oder das Document Ereignis verwenden.

Ich weiß nicht, aber im Allgemeinen in meiner Erfahrung ist es eine schlechte Idee, zu versuchen, den Fokus programmatisch wie dies zu ändern, können Sie immer auf einem Bug Jagd landen. Es gibt viele Möglichkeiten, Fenster zu bekommen, obwohl blättern, so sollten Sie vielleicht etwas anderes versuchen? Zum Beispiel JavaScript im Webbrowser effektiv das Fenster rollen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top