File: System\Windows\Forms\Controls\PropertyGrid\PropertyGridInternal\ArrayElementGridEntry.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.PropertyGridInternal;
 
internal class ArrayElementGridEntry : GridEntry
{
    protected int _index;
 
    public ArrayElementGridEntry(PropertyGrid ownerGrid, GridEntry parent, int index)
        : base(ownerGrid, parent)
    {
        _index = index;
        SetFlag(Flags.RenderReadOnly, parent.EntryFlags.HasFlag(Flags.RenderReadOnly) || parent.ForceReadOnly);
    }
 
    public override GridItemType GridItemType => GridItemType.ArrayValue;
 
    public override bool IsValueEditable => ParentGridEntry?.IsValueEditable ?? false;
 
    public override string PropertyLabel => $"[{_index}]";
 
    public override Type? PropertyType => ParentGridEntry?.PropertyType?.GetElementType();
 
    public override object? PropertyValue
    {
        get
        {
            object? owner = GetValueOwner();
            Debug.Assert(owner is Array, "Owner is not array type!");
            return ((Array)owner).GetValue(_index);
        }
        set
        {
            object? owner = GetValueOwner();
            Debug.Assert(owner is Array, "Owner is not array type!");
            ((Array)owner).SetValue(value, _index);
        }
    }
 
    public override bool ShouldRenderReadOnly => ParentGridEntry?.ShouldRenderReadOnly ?? false;
}