File: System\Windows\Forms\Controls\ToolStrips\ToolStripPanelRow.ToolStripPanelRowControlCollection.ToolStripPanelCellToControlEnumerator.cs
Web Access
Project: src\src\System.Windows.Forms\src\System.Windows.Forms.csproj (System.Windows.Forms)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections;
 
namespace System.Windows.Forms;
 
public partial class ToolStripPanelRow
{
    internal partial class ToolStripPanelRowControlCollection
    {
        ///  We want to pretend like we're only holding controls... so everywhere we've returned controls.
        ///  but the problem is if you do a foreach, you'll get the cells not the controls. So we've got
        ///  to sort of write a wrapper class around the ArrayList enumerator.
        private class ToolStripPanelCellToControlEnumerator : IEnumerator, ICloneable
        {
            private readonly IEnumerator _arrayListEnumerator;
 
            internal ToolStripPanelCellToControlEnumerator(IEnumerator enumerator)
            {
                _arrayListEnumerator = enumerator;
            }
 
            public virtual object? Current
            {
                get
                {
                    ToolStripPanelCell? cell = _arrayListEnumerator.Current as ToolStripPanelCell;
                    Debug.Assert(cell is not null, $"Expected ToolStripPanel cells only!!!{_arrayListEnumerator.Current.GetType()}");
                    return cell?.Control;
                }
            }
 
            public object Clone()
            {
                return MemberwiseClone();
            }
 
            public virtual bool MoveNext()
            {
                return _arrayListEnumerator.MoveNext();
            }
 
            public virtual void Reset()
            {
                _arrayListEnumerator.Reset();
            }
        }
    }
}