9 Stimmen

RaiseEvent("onchange")

Ich habe ein Winform und ein WebBrowser Steuerelement und ich ändere eine Option im Select HTML-Steuerelement.

webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .GetElementsByTagName("option")[13]
    .SetAttribute("selected", "true");

Jetzt funktioniert er und wählt die gewünschte Option aus, aber er löst nicht die onchange Veranstaltung. Der Select hat keine Element-ID, aber er hat einen Klassennamen.

Ich habe es versucht:

webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .RaiseEvent("onchange");

y

webBrowser1.Document
    .GetElementsByTagName("select")[4]
    .GetElementsByTagName("option")[13]
    .RaiseEvent("onchange");

Aber vergeblich.

3voto

Ismail Punkte 634

Ich habe versucht, eine TAB-Taste nach der Auswahl einer Option zu senden, und das Ereignis onchange wurde ausgelöst.

    webBrowser1.Document.GetElementsByTagName("select")[4].Focus();
    webBrowser1.Document.GetElementsByTagName("select")[4]
.GetElementsByTagName("option")[13].SetAttribute("selected", "true");
    SendKeys.Send("{TAB}");

Jetzt ist alles gut.

2voto

Michal Ciechan Punkte 12748

Versuchen Sie, das Ereignis "onChange" auszulösen: z. B. RaiseEvent("onChange");

EDIT: Es wird auf dem Auswahlelement sein, nicht auf der Option.

EDIT2 :

var selectControlElement = webBrowser1.Document
    .GetElementsByTagName("select")[4];
selectControlElement.RaiseEvent("onChange");

Es lohnt sich auch, das selectControlElement zu untersuchen, um zu sehen, ob es irgendwelche Ereignisse hat.

Eine weitere Option (von mir nicht getestet)

object obj = selectControlElement.DomElement;
System.Reflection.MethodInfo mi = obj.GetType().GetMethod("onchange");
mi.Invoke(obj, new object[0]);

Versuchen Sie auch

selectControlElement.InvokeMember("onchange");

1voto

Dj Singh Punkte 19

Einzelheiten entnehmen Sie bitte dem nachstehenden Code.

    void SetComboItem(string id, string value)
    {

        Forms.HtmlElement ddRouteSelected = wBrowser.Document.GetElementById(id);
        foreach (Forms.HtmlElement item in ddRouteSelected.Children)
        {
            if (item.InnerText != null && item.InnerText.ToLower().Equals(value.ToLower()))
            {
                item.SetAttribute("selected", "Selected");
                item.SetAttribute("value", value);
                ddRouteSelected.InvokeMember("onchange");
                break;
            }
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X