HtmlElementCollection, или что то не то с индексами
От: marttry  
Дата: 19.02.14 19:01
Оценка:
Получаю коллекцию дочерних элементов от HtmlElement следующим образом:


HtmlElement newHtmlElement = webBrowser1.Document.GetElementFromPoint(new Point(x,y));
    if (newHtmlElement.CanHaveChildren)
    {
        HtmlElementCollection myCollection = newHtmlElement.Children;
        neededElement = getNeededElement(myCollection, x, y); //функция возвращающая более близкий элемент к (x;y)
    }



private HtmlElement getNeededElement(HtmlElementCollection myCollection, int x, int y)
    {
        HtmlElement needed = myCollection[0]; // вот тут ловлю "ArgumentOutOfRangeException"
        int x1 = ((IHTMLElement2)myCollection[0].DomElement).clientLeft, y1 = ((IHTMLElement2)myCollection[0].DomElement).clientTop, n = 0;
        for (int i = 0; i < myCollection.Count; i++)
        {
            HtmlElement myElem = myCollection[i];
            IHTMLElement2 newElem = (IHTMLElement2)myElem.DomElement;
            if (Math.Abs(newElem.clientLeft - x) < x1 || Math.Abs(newElem.clientTop - y) < y1)
            {
                x1 = newElem.clientLeft; y1 = newElem.clientTop;
                if (newElem.canHaveChildren)
                {
                    needed = getNeededElement(myElem.Children, x, y);
                }
                else
                {
                    needed = myElem;
                }
            }
        }
        return needed;
    }


Более подробно:

Необработанное исключение типа "System.ArgumentOutOfRangeException" в System.Windows.Forms.dll

Дополнительные сведения: Значение '0' недопустимо для 'index'. 'index' должно лежать в диапазоне от 0 до -1.


Не могу понять — в чем причина. Ведь если у меня дочерних элементов нет, то эта строчка в принципе не выполнится? (заодно доставляет фраза "в диапазоне от 0 до -1")
Как жить теперь?
c# vs .net
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.