简体   繁体   English

在C#中选中Web浏览器的复选框时引发事件

[英]Raising event when the checkbox of a webbrowser is checked in C#

I want to raise an event when the checkbox is checked in a web browser. 我想在网络浏览器中选中复选框时引发事件。 Here is what I have come up with: 这是我想出的:

   public class HTMLCheckBoxArgs : EventArgs
   {
      public Guid ElementGuid;
   }
    public delegate void CheckBoxChangeEventHandler(object sender, HTMLCheckBoxArgs e);
    public event CheckBoxChangeEventHandler CheckPressed;

    void OnCheckPressed(HTMLCheckBoxArgs args)
    {
        if (CheckPressed != null)
            CheckPressed(this, args);
    }

    protected void CheckBoxEvents() 
    {
        HtmlElementCollection elements = webBrowser1.Document.GetElementsByTagName("input");
        foreach (HtmlElement el in elements)
        {
            HTMLCheckBoxArgs checkbargs = new HTMLCheckBoxArgs();
            if (el.GetAttribute("type") == "checkbox")
            {
                    checkbargs.ElementGuid = Guid.Parse(el.Id);
                    el.AttachEventHandler("onclick", (sender, args) => OnCheckBoxClicked(el, checkbargs));

            }
        }
    }

    public void OnCheckBoxClicked(object sender, EventArgs args)
    {
        OnCheckPressed((HTMLCheckBoxArgs)args);
    }

The problem that I have is the fact that this way I raise the event when the check box is clicked. 我遇到的问题是,当我单击复选框时,我以这种方式引发事件。 I want the event to be raised when the check box is checked. 我希望在选中复选框时引发事件。

Try this: 尝试这个:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        webBrowser1.DocumentText = "<html><body><input type=\"checkbox\" id=\"chk\" value=\"some\">some thing</body></html>";
    }

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        foreach (HtmlElement el in webBrowser1.Document.All)
        {
            if (el.GetAttribute("type") == "checkbox")
            {
                el.AttachEventHandler("onclick", (send, args) => OnElementClicked(el, EventArgs.Empty));
            }

        }

    }

    private object OnElementClicked(HtmlElement el, EventArgs eventArgs)
    {
        if (el.GetAttribute("checked") == "True")
        {
            MessageBox.Show("checked");
        }
        return false;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM