You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#if NETFX || NETCORE
using System; using System.Collections.Generic; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace Apewer.Surface {
/// <summary></summary>
public class BlockLabel : Label {
private IntPtr _formptr; private bool _movable = false; private bool _hover = false; private bool _locked = false; private bool _dynamic = false;
private Color _wallnormal = FormsUtility.Transparent; private Color _wallhover = FormsUtility.Transparent; private Color _walllocked = FormsUtility.Transparent; private Color _textnormal = FormsUtility.Black; private Color _texthover = FormsUtility.Black; private Color _textlocked = FormsUtility.Black;
/// <summary>界面线程调用器。</summary>
protected delegate void Invoker();
private void _init(string text, Form form) { AutoEllipsis = true; AutoSize = false; Font = FormsUtility.DefaultFont; TextAlign = ContentAlignment.MiddleLeft; BackColor = _wallnormal; ForeColor = FormsUtility.Black; AutoEllipsis = true;
Text = string.IsNullOrEmpty(text) ? "" : text;
if (form != null) { _formptr = form.Handle; _movable = true; MouseDown += Event_Caption_MouseDown; } }
/// <summary></summary>
public BlockLabel() { _init("", null); this.MouseMove += Event_This_MouseMove; this.MouseLeave += Event_This_MouseLeave; }
private void Event_This_MouseLeave(object sender, EventArgs e) { Hover = false; }
private void Event_This_MouseMove(object sender, MouseEventArgs e) { Hover = true; }
/// <summary></summary>
/// <param name="text"></param>
public BlockLabel(string text) { _init(text, null); }
/// <summary></summary>
/// <param name="form"></param>
public BlockLabel(Form form) => _init("", form);
/// <summary></summary>
/// <param name="form"></param>
/// <param name="text"></param>
public BlockLabel(Form form, string text) => _init(text, form);
/// <summary></summary>
/// <param name="text"></param>
/// <param name="form"></param>
public BlockLabel(string text, Form form) => _init(text, form);
private void Event_Caption_MouseDown(object sender, MouseEventArgs e) { if (_movable) FormsUtility.MoveForm(_formptr); }
/// <summary></summary>
public string Caption { get { return Text; } set { if (this.IsHandleCreated) { try { this.Invoke(new Invoker(delegate () { Text = string.IsNullOrEmpty(value) ? "" : value.Trim(); })); } catch { } } else { try { Text = string.IsNullOrEmpty(value) ? "" : value.Trim(); } catch { } } } }
/// <summary></summary>
public bool Locked { get { return _locked; } set { var vchanged = (value != _locked); _locked = value; if (vchanged) UpdateColor(); } }
private bool Hover { get { return _hover; } set { var vchanged = (value != _hover); _hover = value; if (vchanged) UpdateColor(); } }
private void UpdateColor() { if (!_dynamic) return; if (Locked) { BackColor = _walllocked; ForeColor = _textlocked; } else if (_hover) { BackColor = _wallhover; ForeColor = _texthover; } else { BackColor = _wallnormal; ForeColor = _textnormal; } }
/// <summary>启用鼠标悬停和锁定样式。</summary>
public bool DynamicStyle { get { return _dynamic; } set { _dynamic = value; } }
/// <summary></summary>
public Color WallNormal { get { return _wallnormal; } set { _wallnormal = value; UpdateColor(); } }
/// <summary></summary>
public Color WallHover { get { return _wallhover; } set { _wallhover = value; UpdateColor(); } }
/// <summary></summary>
public Color WallLocked { get { return _walllocked; } set { _walllocked = value; UpdateColor(); } }
/// <summary></summary>
public Color TextNormal { get { return _textnormal; } set { _textnormal = value; UpdateColor(); } }
/// <summary></summary>
public Color TextHover { get { return _texthover; } set { _texthover = value; UpdateColor(); } }
/// <summary></summary>
public Color TextLocked { get { return _textlocked; } set { _textlocked = value; UpdateColor(); } }
} }
#endif
|