File: System\Windows\Forms\Controls\DataGridView\DataGridView.SelectedCellsAccessibleObject.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.
 
namespace System.Windows.Forms;
 
public partial class DataGridView
{
    private class DataGridViewSelectedCellsAccessibleObject : AccessibleObject
    {
        private readonly DataGridViewAccessibleObject _parentAccessibleObject;
 
        public DataGridViewSelectedCellsAccessibleObject(DataGridViewAccessibleObject parentAccessibleObject)
        {
            _parentAccessibleObject = parentAccessibleObject;
        }
 
        public override string Name => SR.DataGridView_AccSelectedCellsName;
 
        internal override bool CanGetNameInternal => false;
 
        public override AccessibleObject Parent => _parentAccessibleObject;
 
        private protected override bool IsInternal => true;
 
        public override AccessibleRole Role => AccessibleRole.Grouping;
 
        public override AccessibleStates State => AccessibleStates.Selected | AccessibleStates.Selectable;
 
        public override string Value => Name;
 
        internal override bool CanGetValueInternal => false;
 
        internal override int[] RuntimeId => [RuntimeIDFirstItem, Parent.GetHashCode(), GetHashCode()];
 
        public override AccessibleObject? GetChild(int index) =>
            _parentAccessibleObject.TryGetOwnerAs(out DataGridView? owner) && index >= 0 && index < owner.GetCellCount(DataGridViewElementStates.Selected)
                ? owner.SelectedCell(index)?.AccessibilityObject
                : null;
 
        public override int GetChildCount() =>
            _parentAccessibleObject.TryGetOwnerAs(out DataGridView? owner)
                ? owner.GetCellCount(DataGridViewElementStates.Selected)
                : base.GetChildCount();
 
        public override AccessibleObject GetSelected() => this;
 
        public override AccessibleObject? GetFocused() =>
            _parentAccessibleObject.TryGetOwnerAs(out DataGridView? owner) && owner.CurrentCell is not null && owner.CurrentCell.Selected
                ? owner.CurrentCell.AccessibilityObject
                : null;
 
        public override AccessibleObject? Navigate(AccessibleNavigation navigationDirection)
        {
            DataGridView? owner;
 
            switch (navigationDirection)
            {
                case AccessibleNavigation.FirstChild:
                    return _parentAccessibleObject.TryGetOwnerAs(out owner) && owner.GetCellCount(DataGridViewElementStates.Selected) > 0
                        ? owner.SelectedCell(0)?.AccessibilityObject
                        : null;
 
                case AccessibleNavigation.LastChild:
                    return _parentAccessibleObject.TryGetOwnerAs(out owner) && owner.GetCellCount(DataGridViewElementStates.Selected) > 0
                        ? owner.SelectedCell(owner.GetCellCount(DataGridViewElementStates.Selected) - 1)?.AccessibilityObject
                        : null;
 
                default:
                    {
                        return null;
                    }
            }
        }
    }
}