myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Click-Event beim WebBrowser, egal wo genau geklickt wird
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Click-Event beim WebBrowser, egal wo genau geklickt wird

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Palladin007
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 132
Entwicklungsumgebung: Visual Studio 2010 Express


Palladin007 ist offline

Click-Event beim WebBrowser, egal wo genau geklickt wird

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin

Ich suche einen Event, der ausgeführt wird, sobald ich irgendwo auf dem Webbrowser etwas anklicke. Egal, ob es eine Wirkung hat, oder nicht. Es geht nur darum, ihn an zuklicken.

Aber wenn ich die Evenets so durch schaue, finde ich nichts.

Wie kann ich das trotzdem bekommen?


Gruß
Neuer Beitrag 26.03.2012 21:19 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Palladin007,

ich würde an deiner Stelle mal schauen, ob du in der WndProc nicht irgendeine Nachricht bekommst, aus der du erkennen kannst, dass geklickt wurde.

herbivore
Neuer Beitrag 27.03.2012 12:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 2.718
Entwicklungsumgebung: VS 2010, MonoDevelop, #Develop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

wenn Du die angezeigt Seite auch selbst geschrieben hast, köntest Du per Javascript im document.onmousedown über window.external eine Methode in Deiner Anwendung aufrufen, schau Dir dazu mal Webbrowser.ObjectForScripting an.

Anderfalls hast Du ggf. auch die Möglichkeit, ein eigenes Script-Tag ins Dokument einzubauen, das genauso vorgeht. Beachte aber, dass Du dann besser prüfst, ob document.onmousedown schon einen Handler hat, und wenn ja, diesen zu puffern und vor oder nach der externen Methode aufzurufen.

Gruß, MarsStein
Neuer Beitrag 27.03.2012 18:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 132
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von Palladin007

Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ne, hab ich nicht selber geschrieben.

Das mit der Nachricht, die ich überprüfen kann, werd ich als erstes versuchen, weil ich von Scripting keine Ahnung habe. Noch nicht ^^


Aber ich habe noch eine Idee:

Könnte man nicht den Maus-Klick-Event allgemein verwenden und dann den Ort der Maus berprüfen? Wenn die Maus sich nun über dem Webbrowser befindet, wird ausgeführt, was ausgeführt werden soll und wenn nicht, einfach nix, oder etwas anderes.
Neuer Beitrag 28.03.2012 10:05 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Palladin007,

für die meisten Controls könnte man das Click-Ereignis verwenden, aber gerade für WebBrowser.Click (bzw. genauer WebBrowserBase.Click) gilt laut MSDN nunmal:

Zitat von MSDN:
Dieses Ereignis wird von diesem Steuerelement nicht unterstützt.

Deshalb ja auch mein Vorschlag auf die WndProc auszuweichen.

herbivore
Neuer Beitrag 28.03.2012 10:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 132
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von Palladin007

Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also irgendwie verstehe ich nicht, wie du das meinst.

Muss ich da diese Methode verwenden:

C#-Code:
            Message msg = new Message();
            base.WndProc(ref msg);

Die gibt mir dann eine Nachricht, mit der ich nichts anfangen kann.
Auch, wenn ich die Nachricht durch ein Click-Event auf einen Button ausgeben lasse.

Außerdem, wie soll ich mir diese Nachricht übergeben lassen?
Schließlich gibt es kein Click-Event beim WebBrowser.


Gruß


Edit:

Hab durch Zufall einen Hinweis auf diese Methode gefunden:

C#-Code:
System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)

Das funktioniert auch ganz toll, nur bringt mir das nichts, weil das nicht zulässt, dass ich andere Elemente in der Form verändere.
Aber genau das soll ja passieren.

Kann ich das Problem irgendwie umgehen, oder bin ich da auf dem Holzweg?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am 01.04.2012 06:06.

Neuer Beitrag 01.04.2012 05:57 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Palladin007,

du musst die WndProc natürlich überschreiben, nicht aufrufen. Hast du überhaupt mal danach gesucht gehabt?

Was dir QueueUserWorkItem in dem Zusammenhang bringen soll, weiß ich nicht. Aber die Antwort, wie man aus dem WaitCallback aufs GUI zugreifen kann, steht in  [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke). Auch das hättest du leicht von alleine finden können.

Bitte beachte daher  [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore
Neuer Beitrag 01.04.2012 09:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007
myCSharp.de-Mitglied

Dabei seit: 03.02.2012
Beiträge: 132
Entwicklungsumgebung: Visual Studio 2010 Express

Themenstarter Thema begonnen von Palladin007

Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

QueueUserWorkItem soll, so habe ich es verstanden, parallel zum eigentlichen Programm eine Methode ausführen.
Diese Methode habe ich dann in meiner Form-Klasse und die wartet mittels einer while-Schleife solange, bis irgendwo geklickt wird. Wenn dann geklickt wird, überprüft sie noch, ob zu diesem Zeitpunkt die Maus sich über dem Webbrowser befindet.
Wenn dem so ist, wird das ausgeführt, was ausgeführt werden soll, wenn nicht, wartet er weiter.

Hat auch wunderbar funktioniert, lässt aber keine Änderungen an der Fomr-Klasse zu, obwohl die Methode sich darin befindet.

Werd mir nachher mal deinen Text dazu durchlesen.



Was WndProc angeht, weiß ich ehrlich gesagt immer och nicht, wie du das meinst.
Ich werd jetzt gleich mal etwas damit rum experimentieren, vielleicht find ich es ja raus^^


Gruß




Edit:
Ich weiß jetzt, was du meinst.
Aber wie soll ich aus den ganzen Nachrichten heraus filtern, welche nun zum WebBrowser gehört?
Hab mir mal alle in einer Text-Box anzeigen lassen und wenn ich dann beim Ausführen immer irgendwo hin klicke, oder eine Seite lade und dort navigiere, sehe ich, was bei den Nachrichten passiert.
Aber endweder die werden zu schnell aktualisiert, oder es gibt keine Nachricht, wenn ich irgendwo klicke.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am 01.04.2012 15:18.

Neuer Beitrag 01.04.2012 14:38 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Palladin007,

im GUI darf man nicht warten. Siehe  [FAQ] Warum blockiert mein GUI?

Ich finde es ehrlich gesagt etwas zäh und nicht im Sinne des Forums, wenn wir nicht weiterkommen, wenn du immer wieder an so grundlegenden Punkten hängst. Natürlich haben wir alle klein angefangen, andererseits erwarten wir eben zu recht, dass vor der Eröffnung eines Threads die Grundlagen (hier also die der Windows Forms Programmierung) bekannt sind.

herbivore
Neuer Beitrag 01.04.2012 16:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 22.05.2013 11:02