#region Imports using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using static DPumpHydr.WinFrmUI.RLT.Helper.CrownHelper; #endregion namespace DPumpHydr.WinFrmUI.RLT.Controls { #region CrownLabel public class CrownLabel : Label { #region Field Region private bool _autoUpdateHeight; private bool _isGrowing; #endregion #region Property Region [Category("Layout")] [Description("Enables automatic height sizing based on the contents of the label.")] [DefaultValue(false)] public bool AutoUpdateHeight { get => _autoUpdateHeight; set { _autoUpdateHeight = value; if (_autoUpdateHeight) { AutoSize = false; ResizeLabel(); } } } public new bool AutoSize { get => base.AutoSize; set { base.AutoSize = value; if (AutoSize) { AutoUpdateHeight = false; } } } #endregion #region Constructor Region public CrownLabel() { ForeColor = ThemeProvider.Theme.Colors.LightText; } #endregion #region Method Region private void ResizeLabel() { if (!_autoUpdateHeight || _isGrowing) { return; } try { _isGrowing = true; Size sz = new(Width, int.MaxValue); sz = TextRenderer.MeasureText(Text, Font, sz, TextFormatFlags.WordBreak); Height = sz.Height + Padding.Vertical; } finally { _isGrowing = false; } } #endregion #region Event Handler Region protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); ResizeLabel(); } protected override void OnFontChanged(EventArgs e) { base.OnFontChanged(e); ResizeLabel(); } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); ResizeLabel(); } #endregion } #endregion }