2011-05-18 27 views
7

Tengo un formulario winform y un control WebBrowser y estoy cambiando una opción en el control HTML seleccionado.RaiseEvent ("onchange")

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

Ahora funciona y selecciona la opción requerida, pero no se dispara el evento onchange. La selección no tiene un identificador de elemento, pero sí tiene un nombre de clase.

me trataron:

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

y

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

Pero en vano.

Respuesta

3

me trató y envió una tecla TAB después de seleccionar una opción y que ha provocado el evento onchange.

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

Todo está bien ahora.

+1

¡Guau, buen hack! – harsimranb

+0

¡Agradable! Buen pensamiento. – DeeArgee

-1

intente levantar evento onChange: p. RaiseEvent ("onChange");

EDITAR: estará en el elemento seleccionado, no en la opción.

Edit2:

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

también su valor selectControlElement inspección para ver si tiene algún evento.

Otra opción (no probado por mí)

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

También intente

selectControlElement.InvokeMember("onchange"); 
+0

Sí, ya lo hice, mire el código. – Ismail

+0

capital c, en onChange (aunque pensé que no hacía la diferencia). –

+0

Sí, no hace ninguna diferencia. Intenté ambos. – Ismail

1

Consulte el código a continuación para obtener más información.

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; 
      } 
     } 
    }