ListBox und WebBrowser auf einer Form

Outsider77

Erfahrenes Mitglied
Hallo zusammen,

ich hab o.g. Controls auf einer Form.
In der ListBox stehen sämtliche PDF-Dateien eines bestimmten Pfades.
Bei Klick auf einen Eintrag wird entsprechende PDF im Webbrowser angezeigt.
Wenn ich jetzt allerdings mit der Pfeil-nach-unten-Taste in der ListBox einen anderen Eintrag auswählen möchte,
hat das nur zur Folge, das weitere Seiten der vorher ausgewählten PDF-Datei im WB angezeigt werden.

Wie bekomme ich es hin, das das Betätigen der Pfeil-nach-unten-Taste auf die ListBox wirkt?

Vielen Dank für die Hilfe!

Gruß Outi
 

Shakie

Erfahrenes Mitglied
Du musst den Fokus erst auf die ListBox setzen. Klicke mit der Maus in die ListBox und drücke dann die Pfeiltaste.
Du kannst den Focus auch mittels Focus-Methode auf die ListBox setzen.
 

Outsider77

Erfahrenes Mitglied
Das funktioniert leider nicht.
Anscheinend verliert die Listbox bei jedem navigate den Focus.
Auch wenn ich ihr den Focus bei DocumentCompleted zurückgebe,
spricht die Listbox nicht auf den Tastendruck an.
 

Shakie

Erfahrenes Mitglied
Aber wenn du vorher mit der Maus hinein klickst, dann funktioniert es, oder?
EDIT: Habe das hier gefunden. ProgressChanged-Event löst das Problem bei mir. Ich kann dir aber nicht sagen, warum.
Und hiernach ist es nicht die Schuld des WebBrowser-Controls, sondern Javascript-Code auf der geladenen Seite, der die Javascript-Focus Methode aufruft.
Beispielsweise verlor die ListBox in meinem Test den Fokus nicht, wenn ich http://www.tutorials.de oder http://xkcd.com lud. Der Fokus ging hingegen verloren, wenn ich zu http://www.google.de navigierte.
 
Zuletzt bearbeitet:

Outsider77

Erfahrenes Mitglied
Das kann nicht sein. Sobald du mit der Maus in die ListBox klickst, hat sie den Focus. Danach müsste sie auf Pfeiltastendrücke reagieren!

Ich gebe Dir prinzipiell recht, aber das hat es wirklich nicht getan.
Mit jedem Klick in die Listbox wird ja schon die ausgewählte PFD geladen,
und ich vermute, dass dann der Webbrowser bereits wieder den Focus hat.
Und ein Klick in eine leere Stelle der Listbox brachte ihr den Focus auch nicht zurück...
 

Outsider77

Erfahrenes Mitglied
Die Probleme häufen sich.
Ich habe außer den genannnten Steuerelementen noch eine TextBox auf der Form, die bei Eingabe die Listbox filtert.
Wenn ich beim Webbrowser mit ProgressChanged den Focus auf die Listbox setze,
muß ich nach jedem Zeichen erneut in die Textbox klicken, um ein weiteres Zeichen eingeben zu können.
Und danach erneut ein Klick in die Textbox...das ist ziemlich User-unfreundlich.
Gibt es vielleicht eine Möglichkeit, dem Webbrowser grundsätzlich den Focus zu entziehen?
Am Besten wäre folgende Funktionalität:

- Die TextBox hat ständig den Focus, damit Werte ohne erneuten Klick eingetragen werden können
- bei aktiver Form reagiert bei Pfeiltasten-Druck nur die Listbox darauf (wenn ein Eintrag selektiert ist)

Allerdings vermute ich mit meinen rudimentären VB-Kenntnissen, dass sowas schlecht umsetzbar ist.
Aber vielleicht hat ja doch jemand eine Idee / Lösung.
 
Zuletzt bearbeitet:

Shakie

Erfahrenes Mitglied
Gibt es vielleicht eine Möglichkeit, dem Webbrowser grundsätzlich den Focus zu entziehen?
Nein, gibt es meines Wissens nach nur sehr umständlich (vielleicht indem du die WndProc-Methode des Webbrowsers überschreibst und Focus-Nachrichten herausfilterst).
Das Problem ist wie gesagt nicht der Webbrowser, sondern Javascript auf der geladenen Seite. Du könntest Javascript in den globalen InternetExplorer-Einstellungen deaktivieren und erst später wieder aktivieren.

bei aktiver Form reagiert bei Pfeiltasten-Druck nur die Listbox darauf (wenn ein Eintrag selektiert ist)
Eine Möglichkeit wäre, die KeyPreview-Eigenschaft der Form auf True zu setzen und Tastendrücke manuell über das KeyPress-Ereignis der Form zu behandeln.

EDIT: Vielleicht gibt es aber noch eine ganz andere Lösung? Wozu soll das Programm denn genutzt werden? Warum soll der Focus denn nicht auf den Webbrowser wechseln, wenn der Benutzer die Internetseite in der ListBox ausgewählt hat? Will der Benutzer die Seiten nur wenige Sekunden lang betrachten? Dann könntest du die Seiten vielleicht vorab laden und nur einen statischen Screenshot anzeigen.
 
Zuletzt bearbeitet:

Outsider77

Erfahrenes Mitglied
Das Programm (bzw. der Programm-Teil) wird zum Darstellen von PDF's genutzt.
Wenn die Form läd, werden in die Listbox alle vorhandenen PDF-Dateinamen eines bestimmten Ordners geladen.
Jetzt kann der User entweder einen dieser Einträge in der Listbox anklicken und die PDF wird in den Browser geladen, oder
der User dezimiert die Einträge der Listbox (also eine Art Filter), in dem er in die Textbox Werte eingibt.

Mal ein Beispiel:
Einträge in der Listbox...
123212513.pdf
123564813.pdf
125466313.pdf
225336513.pdf
.
.
.

Eingabe in Textbox:
125

Jetzt werden alle Einträge in der Listbox, die nicht mit 125 beginnen, gelöscht.
Vielleicht ist es so verständlicher...