Files
netch/Netch/Forms/SyncGlobalCheckBox.cs
2022-03-22 14:20:23 +08:00

87 lines
1.6 KiB
C#

namespace Netch.Forms;
public class SyncGlobalCheckBox : CheckBox
{
public SyncGlobalCheckBox()
{
AutoCheck = false;
OnSyncGlobalChanged();
}
private bool _syncGlobal;
private bool _globalValue;
public bool SyncGlobal
{
get => _syncGlobal;
set
{
if (value == _syncGlobal)
return;
_syncGlobal = value;
OnSyncGlobalChanged();
}
}
public bool GlobalValue
{
get => _globalValue;
set
{
if (value == _globalValue)
return;
_globalValue = value;
if (SyncGlobal)
Checked = value;
}
}
protected override void OnClick(EventArgs e)
{
if (Checked == GlobalValue)
{
SyncGlobal = !SyncGlobal;
if (SyncGlobal)
return;
}
Checked = !Checked;
base.OnClick(e);
}
public bool? Value
{
get => _syncGlobal ? null : Checked;
set
{
if (value == null)
{
SyncGlobal = true;
}
else
{
SyncGlobal = false;
Checked = (bool)value;
}
}
}
private void OnSyncGlobalChanged()
{
if (_syncGlobal)
{
Font = new Font(Font, FontStyle.Regular);
BackColor = SystemColors.Control;
}
else
{
Font = new Font(Font, FontStyle.Bold | FontStyle.Italic);
BackColor = Color.Yellow;
}
}
}