File: winforms\Managed\System\WinForms\FormCollection.cs
Project: ndp\fx\src\System.Windows.Forms.csproj (System.Windows.Forms)
//------------------------------------------------------------------------------
// <copyright file="FormCollection.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Windows.Forms {
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Globalization;
    
    /// <include file='doc\FormCollection.uex' path='docs/doc[@for="FormCollection"]/*' />
    /// <devdoc>
    ///    <para>
    ///       This is a read only collection of Forms exposed as a static property of the 
    ///       Application class. This is used to store all the currently loaded forms in an app.
    ///    </para>
    /// </devdoc>
    public class FormCollection : ReadOnlyCollectionBase {
 
        internal static object CollectionSyncRoot = new object();
        
        /// <include file='doc\FormCollection.uex' path='docs/doc[@for="FormCollection.this"]/*' />
        /// <devdoc>
        ///    <para>
        ///       Gets a form specified by name, if present, else returns null. If there are multiple
        ///       forms with matching names, the first form found is returned.
        ///    </para>
        /// </devdoc>
        public virtual Form this[string name] {
            get {
                if (name != null) {
                    lock (CollectionSyncRoot) {
                        foreach(Form form in InnerList) {
                            if (string.Equals(form.Name, name, StringComparison.OrdinalIgnoreCase)) {
                                return form;
                            }
                        }
                    }
                }
                return null;
            }
        }
        
        /// <include file='doc\FormCollection.uex' path='docs/doc[@for="FormCollection.this1"]/*' />
        /// <devdoc>
        ///    <para>
        ///       Gets a form specified by index.
        ///    </para>
        /// </devdoc>
        public virtual Form this[int index] {
            get {
                Form f = null;
 
                lock (CollectionSyncRoot) {
                    f = (Form) InnerList[index];
                }
                return f;
            }
        }
        
        /// <devdoc>
        ///    Used internally to add a Form to the FormCollection
        /// </devdoc>
        internal void Add(Form form) {
            lock (CollectionSyncRoot) {
                InnerList.Add(form);
            }
        }
 
        /// <devdoc>
        ///    Used internally to check if a Form is in the FormCollection
        /// </devdoc>
        internal bool Contains(Form form)
        {
            bool inCollection = false;
            lock (CollectionSyncRoot)
            {
                inCollection = InnerList.Contains(form);
            }
            return inCollection;
        }
 
        /// <devdoc>
        ///    Used internally to add a Form to the FormCollection
        /// </devdoc>
        internal void Remove(Form form) {
            lock (CollectionSyncRoot) {
                InnerList.Remove(form);
            }
        }
    }
}