HtmlElementCollection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / HtmlElementCollection.cs / 1305376 / HtmlElementCollection.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

using System; 
using System.ComponentModel; 
using System.Diagnostics;
using System.IO; 
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Security.Permissions; 
using System.Security;
using System.Runtime.InteropServices; 
using System.Net; 
using System.Collections;
 
namespace System.Windows.Forms {
    /// 
    /// 
    ///    [To be supplied.] 
    /// 
    public sealed class HtmlElementCollection : ICollection { 
        private UnsafeNativeMethods.IHTMLElementCollection htmlElementCollection; 
        private HtmlElement[] elementsArray;
        private HtmlShimManager shimManager; 

        internal HtmlElementCollection(HtmlShimManager shimManager) {
            this.htmlElementCollection = null;
            this.elementsArray = null; 

            this.shimManager = shimManager; 
        } 

        internal HtmlElementCollection(HtmlShimManager shimManager, UnsafeNativeMethods.IHTMLElementCollection elements) { 
            this.htmlElementCollection = elements;
            this.elementsArray = null;
            this.shimManager = shimManager;
            Debug.Assert(this.NativeHtmlElementCollection != null, "The element collection object should implement IHTMLElementCollection"); 
        }
 
        internal HtmlElementCollection(HtmlShimManager shimManager, HtmlElement[] array) { 
            this.htmlElementCollection = null;
            this.elementsArray = array; 
            this.shimManager = shimManager;
        }

        private UnsafeNativeMethods.IHTMLElementCollection NativeHtmlElementCollection { 
            get {
                return this.htmlElementCollection; 
            } 
        }
 
        /// 
        /// 
        ///    [To be supplied.]
        ///  
        public HtmlElement this[int index] {
            get { 
                //do some bounds checking here... 
                if (index < 0 || index >= this.Count) {
                    throw new ArgumentOutOfRangeException("index", SR.GetString(SR.InvalidBoundArgument, "index", index, 0, this.Count - 1)); 
                }

                if (this.NativeHtmlElementCollection != null) {
                    UnsafeNativeMethods.IHTMLElement htmlElement = 
                            this.NativeHtmlElementCollection.Item((object)index, (object)0) as UnsafeNativeMethods.IHTMLElement;
                    return (htmlElement != null) ? new HtmlElement(shimManager, htmlElement) : null; 
                } 
                else if (elementsArray != null) {
                    return this.elementsArray[index]; 
                }
                else {
                    return null;
                } 
            }
        } 
 
        /// 
        ///  
        ///    [To be supplied.]
        /// 
        public HtmlElement this[string elementId] {
            get { 
                if (this.NativeHtmlElementCollection != null) {
                    UnsafeNativeMethods.IHTMLElement htmlElement = 
                            this.NativeHtmlElementCollection.Item((object)elementId, (object)0) as UnsafeNativeMethods.IHTMLElement; 
                    return (htmlElement != null) ? new HtmlElement(shimManager, htmlElement) : null;
                } 
                else if (elementsArray != null) {
                    int count = this.elementsArray.Length;
                    for (int i = 0; i < count; i++) {
                        HtmlElement element = this.elementsArray[i]; 
                        if (element.Id == elementId) {
                            return element; 
                        } 
                    }
                    return null;    // not found 
                }
                else {
                    return null;
                } 
            }
        } 
 
        /// 
        ///  
        ///    [To be supplied.]
        /// 
        public HtmlElementCollection GetElementsByName(string name) {
            int count = this.Count; 
            HtmlElement[] temp = new HtmlElement[count];    // count is the maximum # of matches
            int tempIndex = 0; 
 
            for (int i = 0; i < count; i++) {
                HtmlElement element = this[i]; 
                if (element.GetAttribute("name") == name) {
                    temp[tempIndex] = element;
                    tempIndex++;
                } 
            }
 
            if (tempIndex == 0) { 
                return new HtmlElementCollection(shimManager);
            } 
            else {
                HtmlElement[] elements = new HtmlElement[tempIndex];
                for (int i = 0; i < tempIndex; i++) {
                    elements[i] = temp[i]; 
                }
                return new HtmlElementCollection(shimManager, elements); 
            } 
        }
 
        /// 
        /// 
        ///     Returns the total number of elements in the collection.
        ///  
        public int Count {
            get { 
                if (this.NativeHtmlElementCollection != null) { 
                    return this.NativeHtmlElementCollection.GetLength();
                } 
                else if (elementsArray != null) {
                    return this.elementsArray.Length;
                }
                else { 
                    return 0;
                } 
            } 
        }
 
        /// 
        /// 
        bool ICollection.IsSynchronized {
            get { 
                return false;
            } 
        } 

        ///  
        /// 
        object ICollection.SyncRoot {
            get {
                return this; 
            }
        } 
 
        /// 
        ///  
        void ICollection.CopyTo(Array dest, int index) {
            int count = this.Count;
            for (int i = 0; i < count; i++) {
                dest.SetValue(this[i], index++); 
            }
        } 
 
        /// 
        ///  
        public IEnumerator GetEnumerator() {
            HtmlElement[] htmlElements = new HtmlElement[this.Count];
            ((ICollection)this).CopyTo(htmlElements, 0);
 
            return htmlElements.GetEnumerator();
        } 
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK