| Sehr häufig wird der Wunsch geäußert auf Formulare und deren Elemente (Textfelder, Radiobuttons, Checkboxen, Popup-Menüs...) zuzugreifen, bzw. diese auszulesen oder zu füllen/setzen. Aus diesem Grund existieren im IE (egal welche Version) 3 Objekte, die nur für die Behandlung von Formularen bereitstehen - Forms , Elements und Options . Natürlich kann man auch mit dem (weiter unten erklärten) all-Objekt und der DOM-Syntax auf Formulare und deren Elemente zugreifen, das wäre aber mit Kanonen auf Spatzen geschossen. Eine umfangreiche Erklärung dieser Objekte und deren Methoden/Eigenschaften würde den Rahmen dieses Artikel sprengen (dazu wird es einen eigenen Artikel geben). Ich werde jedoch die am häufigsten vorkommenden Anwendungen darstellen. Als erstes wird beschrieben wie auf ein Formular zugegriffen wird (nicht auf die darin enthalten Elemente, dazu kommen wir später). Formulare liegen im IE als Objekte vor, und zwar vom Typ Forms . Dieses Objekt besitzt u.a. die Eigenschaften: | Eigenschaft | Beschreibung | | action | Die URL, zu welcher das Formular geschickt werden soll. | | name | Der Name des Formular, welcher im Name-Attribut steht. | | target | Gibt den Namen des Frame an, in welchem eine Antwortseite des Server angezeigt werden soll. | | length | Anzahl der Formulare im Dokument. | Tabelle 1 Da ein HTML-Dokument mehrere Formulare enthalten kann, könnte man zunächst feststellen um wieviele es sich dabei handelt, folgendes erledigt dies für uns: WebBrowser1.Document.Forms.length Listing 1 Da gleichnamige Tags [hier das <Form> Tag] als Objektarray [ich nenne es einfach mal so] vorliegen, kann man diese auch wie ein Array ansprechen: WebBrowser1.Document.Forms(1) Listing 2 gibt uns das zweite <Form> Tag als Objekt zurück. Sollte ein Formular über ein name-Attribut verfügen, kann dieses auch über: WebBrowser1.Document.Forms("formularName") Listing 3 als Objekt erhalten werden. Nun steht nichts im Wege die Eigenschaften des form-Objekt auszulesen oder neu zu beschreiben: x = WebBrowser1.Document.Forms("formularName").action Listing 4 gibt die Absende-URL zurück. Möchten Sie diese ändern ? WebBrowser1.Document.Forms(1).action = "neueURL" Listing 5 Wo Objekte sind, da sind nicht nur Eigenschaften sondern auch Methoden (meistens). Da macht auch das forms -Objekt keine Ausnahme: | Methode | Beschreibung | | reset | Löscht alle Formularinhalte. | | submit | Schickt das Formular ab. | Tabelle 2 Ein Formular abzuschicken ist somit ein Kinderspiel: WebBrowser1.Document.Forms("meinFormular").submit Listing 6 In VB existieren für alle möglichen Tags eigene Objekttypen. Hier wäre dies HTMLFormElement Dim myForm As HTMLFormElement
Set myForm = WebBrowser1.Document.Forms(0)
myForm.action = "neueURL" Listing 7 In myForm befindet sich nun das erste Formular als Objekt und es können alle Methoden und Eigenschaften angewandt werden. Diese finden Sie im Objektkatalog. Wie von VB gewohnt, existieren auch in HTML-Dokumenten Ereignisse (Events). Diese Events können ohne großen Aufwand an VB "weitergeleitet" werden. Um bei Formularen zu bleiben, werde ich zeigen wie man in VB ein Ereignis auslöst, wenn ein Formular z.B. mit einen Mausklick auf dem Submit-Button abgeschickt wird. Option Explicit
Dim WithEvents myForm As HTMLFormElement
Private Sub Form_Load()
WebBrowser1.Navigate2 "formular.html"
End Sub
Private Sub WebBrowser1_DocumentComplete _
(ByVal pDisp As Object, URL As Variant)
Set myForm = WebBrowser1.Document.Forms("meinFormular")
End Sub
Private Function myForm_onsubmit() As Boolean
MsgBox "Wer wagt es mein Formular abzuschicken ?"
End Function Listing 8 Führen Sie bitte dieses Beispiel einmal aus - fällt ihnen etwas auf ? Die Messagbox erscheint, Sie klicken auf "ok" und was passiert ? Nichts, rein gar nichts - das Formular wird nicht abgeschickt. Warum? Das liegt darin begründet, daß beim Auslösen dieses Events dieses zwar ausgeführt wird, aber nicht die Aktion welches das Event verursacht hat [hier der Klick auf den Submit-Button]. Das Event erwartet nämlich einen Rückgabewert, ob die Aktion letztendlich ausgeführt werden soll oder nicht. Aus diesem Grund werden bei HTML-Events häufig Funktionen benutzt [siehe oben - myForm_onsubmit]. Da wir keinen Rückgabewert angegeben haben, wird defaultmäßig "False" benutzt und das Formular nicht abgeschickt. Fügen Sie nun bitte die Zeile: myForm_onsubmit = True Listing 9 unterhalb der MsgBox-Zeile ein und schon macht sich das Formular auf die Socken. Alle weiteren Events des Objektes finden Sie [wo sonst] im Objektkatalog. Der IE stellt ein "richtiges" Event-Objekt zur Verfügung, worüber jede Aktion des User abgefangen werden kann [wie in VB, aber bedeutend mächtiger] Dieses Objekt werde ich in einen weiteren Artikel vorstellen. |