使用C#在Web浏览器控件中获取HTML元素的绝对位置

Sol*_*ake 14 html c# position

我想知道是否有可能获得我用C#在webbrowser控件中加载的特定HTML元素的绝对位置.

我尝试了.Net提供的几乎所有选项..它们都没有给我正确的位置.所有这些都给我0为Y坐标..元素绝对不是0 ..

有没有人有任何解决方案或想法来解决这个问题?

Sol*_*ake 12

这是我到目前为止的解决方案:

//将我们的Web浏览器的大小设置为与图像int width,height相同的大小; width = webBrowser1.Document.Images [0] .ClientRectangle.Width; height = webBrowser1.Document.Images [0] .ClientRectangle.Height;

webBrowser1.Width = width;
webBrowser1.Height = height;

//scroll vertically to that element
webBrowser1.Document.Images[0].OffsetParent.ScrollIntoView(true);

//calculate x, y offset of the element
int x = webBrowser1.Document.Images[s].OffsetRectangle.Left + 
webBrowser1.Document.Images[s].OffsetParent.OffsetRectangle.Left + 
webBrowser1.Document.Images[s].OffsetParent.OffsetParent.OffsetRectangle.Left+
webBrowser1.Document.Images[s].OffsetParent.OffsetParent.OffsetParent.OffsetRectangle.Left+
webBrowser1.Document.Images[s].OffsetParent.OffsetParent.OffsetParent.OffsetParent.OffsetRectangle.Left;

int y = webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop;

//now scroll to that element
webBrowser1.Document.Window.ScrollTo(x, y);
Run Code Online (Sandbox Code Playgroud)

现在这段代码完美无缺..但是计算偏移量存在问题.我需要计算元素的offsetparent然后计算offsetparent的offsetparent等.我需要动态地做这个而不是逐个添加..我不知道该怎么做.有任何想法吗?

编辑: 这是我的最后和最终版本,它适用于任何HTML元素,它将找到我想要的任何元素的绝对位置..

   public int getXoffset(HtmlElement el)
     {
         //get element pos
         int xPos = el.OffsetRectangle.Left;

         //get the parents pos
         HtmlElement tempEl = el.OffsetParent;
         while (tempEl != null)
         {
             xPos += tempEl.OffsetRectangle.Left;
             tempEl = tempEl.OffsetParent;
         }

         return xPos; 
     }  

     public int getYoffset(HtmlElement el)
     {
         //get element pos
         int yPos = el.OffsetRectangle.Top;

         //get the parents pos
         HtmlElement tempEl = el.OffsetParent;
         while (tempEl != null)
         {
             yPos += tempEl.OffsetRectangle.Top;
             tempEl = tempEl.OffsetParent;
         }

         return yPos;
     }
Run Code Online (Sandbox Code Playgroud)

然后使用以下位置:

 //now scroll to that element
 webBrowser1.Document.Window.ScrollTo(x, y);
Run Code Online (Sandbox Code Playgroud)

完成了!