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.
192 lines
5.4 KiB
192 lines
5.4 KiB
#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
|
|
|