File: System\ComponentModel\Design\DesignerActionPanel.CheckBoxPropertyLine.cs
Web Access
Project: src\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Drawing;
using System.Windows.Forms;
 
namespace System.ComponentModel.Design;
 
internal sealed partial class DesignerActionPanel
{
    private sealed class CheckBoxPropertyLine : PropertyLine
    {
        private readonly CheckBox _checkBox;
 
        private CheckBoxPropertyLine(IServiceProvider serviceProvider, DesignerActionPanel actionPanel)
            : base(serviceProvider, actionPanel)
        {
            _checkBox = new CheckBox
            {
                BackColor = Color.Transparent,
                CheckAlign = ContentAlignment.MiddleLeft,
                TextAlign = ContentAlignment.MiddleLeft,
                UseMnemonic = false,
                ForeColor = ActionPanel.LabelForeColor
            };
 
            _checkBox.CheckedChanged += OnCheckBoxCheckedChanged;
 
            AddedControls.Add(_checkBox);
        }
 
        public override void Focus() => _checkBox.Focus();
 
        public override Size LayoutControls(int top, int width, bool measureOnly)
        {
            Size checkBoxPreferredSize = _checkBox.GetPreferredSize(new Size(int.MaxValue, int.MaxValue));
            if (!measureOnly)
            {
                _checkBox.Location = new Point(LineLeftMargin, top + LineVerticalPadding / 2);
                _checkBox.Size = checkBoxPreferredSize;
            }
 
            return checkBoxPreferredSize + new Size(LineLeftMargin + LineRightMargin, LineVerticalPadding);
        }
 
        private void OnCheckBoxCheckedChanged(object? sender, EventArgs e)
        {
            SetValue(_checkBox.Checked);
        }
 
        protected override void OnPropertyTaskItemUpdated(ToolTip toolTip, ref int currentTabIndex)
        {
            _checkBox.Text = StripAmpersands(PropertyItem!.DisplayName);
            _checkBox.AccessibleDescription = PropertyItem.Description;
            _checkBox.TabIndex = currentTabIndex++;
 
            toolTip.SetToolTip(_checkBox, PropertyItem.Description);
        }
 
        protected override void OnValueChanged()
        {
            _checkBox.Checked = (bool)Value!;
        }
 
        public static StandardLineInfo CreateLineInfo(DesignerActionList list, DesignerActionPropertyItem item) => new Info(list, item);
 
        private sealed class Info(DesignerActionList list, DesignerActionPropertyItem item) : PropertyLineInfo(list, item)
        {
            public override Line CreateLine(IServiceProvider serviceProvider, DesignerActionPanel actionPanel)
            {
                return new CheckBoxPropertyLine(serviceProvider, actionPanel);
            }
 
            public override Type LineType => typeof(CheckBoxPropertyLine);
        }
    }
}