DarkUI.Net5/DarkUI/Controls/DarkLabel.cs
2015-09-18 10:03:24 +01:00

93 lines
2.0 KiB
C#

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace DarkUI
{
public class DarkLabel : Label
{
#region Field Region
private bool _autoUpdateHeight;
private bool _isGrowing;
#endregion
#region Property Region
[Category("Appearance")]
[Description("Determines whether the label will automatically update height based on content.")]
[DefaultValue(false)]
public bool AutoUpdateHeight
{
get { return _autoUpdateHeight; }
set
{
_autoUpdateHeight = value;
if (_autoUpdateHeight)
{
AutoSize = false;
ResizeLabel();
}
}
}
#endregion
#region Constructor Region
public DarkLabel()
{
ForeColor = Colors.LightText;
}
#endregion
#region Method Region
private void ResizeLabel()
{
if (!_autoUpdateHeight || _isGrowing)
return;
try
{
_isGrowing = true;
var sz = new Size(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
}
}