none
HTMLElement eines markierten Textes ermitteln RRS feed

  • Allgemeine Diskussion

  • Guten Abend werte Mitstreiter,

    Ich sitze vor einen etwas kleineren Problem das ich wie folgt erläutere ...
    Meine Absicht ist es einen Text im WebBrowser Markieren zu können und über ein Rechtsklick im Context Menü und eine entsprechende Option "Markieren" dann Zugriff auf das jeweilige Element zu bekommen das markiert wurden ist.
    Alles Funktioniert soweit bis die Tatsache das ich keine Idee habe wie ich an das HtmlElement kommen soll ohne das ganze Dokument zu durchsuchen nach den markierten Text. GetElementFromPoint ist eine Idee aber dazu benötige ich eben einen Punkt irgendwo innerhalb des Markierten Bereiches.

            public void menuMark_Click(object sender, EventArgs e)
            {
                IHTMLDocument2 HtmlDoc = (IHTMLDocument2)mainBrowser.Document.DomDocument;
                IHTMLSelectionObject selection = HtmlDoc.selection;
                IHTMLTxtRange selectedRange = (IHTMLTxtRange)selection.createRange();
                /*
                 * Todo Get Selected Html Element 
                 */
            }        
    
            private void browser_DocumentCompleted(Object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                this.mainBrowser.Document.Body.MouseDown += new HtmlElementEventHandler(Body_MouseDown);
                this.mainBrowser.AllowNavigation = false;
                this.txtAdressbar.Text = this.mainBrowser.Url.AbsoluteUri.Replace(this.mainBrowser.Url.Query, "");
                ContextMenuStrip context = new ContextMenuStrip();
                context.Items.Add("Markieren");
                context.Items.Add("Entfernen");
                context.Items[0].Click += new EventHandler(this.menuMark_Click);
                context.Items[1].Click += new EventHandler(this.menuMark_Click);
                this.mainBrowser.ContextMenuStrip = context;
                this.mainBrowser.IsWebBrowserContextMenuEnabled = false;
            }
    
            void Body_MouseDown(Object sender, HtmlElementEventArgs e)
            {
                if(e.MouseButtonsPressed == MouseButtons.Right)
                {
                    HtmlElement element = this.mainBrowser.Document.GetElementFromPoint(e.ClientMousePosition);
    
                    switch (element.TagName)
                    {
                        case "IMG":
                            {
                                if (element.GetAttribute("src").StartsWith("$DB_VAR_GET_"))
                                    return;
                                else
                                {
                                    ParseableObject newObj = new ParseableObject();
                                    newObj.Default = element.GetAttribute("src");
                                    newObj.Element = element;
                                    element.SetAttribute("src", "$DB_VAR_GET_" + Parser.Instance.Count());
                                    Parser.Instance.Add(newObj);
                                }
                            } break;
                        default:
                            {
                                if (element.InnerText.StartsWith("$DB_VAR_GET_"))
                                    return;
                                else
                                {
                                    ParseableObject newObj = new ParseableObject();
                                    newObj.Default = element.InnerText;
                                    newObj.Element = element;
                                    newObj.Outer = newObj.Outer.Replace(element.InnerText, "$DB_VAR_GET_" + Parser.Instance.Count());
                                    Parser.Instance.Add(newObj);
                                }
                            } break;
                    }
                }
            }

    Samstag, 23. April 2016 23:26

Alle Antworten

  • Hallo Sinaed,

    es gibt auch ein ähnliches Thema. Schau dir mal diesen Thread an:

    http://stackoverflow.com/questions/217353/retrieving-selected-text-from-webbrowser-control-in-netc

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 25. April 2016 07:55
  • Hallo Sinaed,

    bist Du hier weitergekommen?

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 2. Mai 2016 08:04