* UIDropControl: 优化下拉框控件显示效果

This commit is contained in:
Sunny 2021-09-02 16:29:02 +08:00
parent 22e519c195
commit ee1fb615a8
8 changed files with 40 additions and 24 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -80,27 +80,10 @@ namespace Sunny.UI
MouseLocation = e.Location; MouseLocation = e.Location;
} }
protected override void OnPaint(PaintEventArgs e) protected override void OnEnabledChanged(EventArgs e)
{ {
base.OnPaint(e); base.OnEnabledChanged(e);
if (Enabled) edit.BackColor = Enabled ? Color.White : GetFillColor();
{
if (Radius == 0 || RadiusSides == UICornerRadiusSides.None)
e.Graphics.DrawRectangle(RectColor, 0, 0, Width - 1, Height - 1);
else
e.Graphics.DrawRoundRectangle(RectColor, 0, 0, Width, Height, Radius);
edit.BackColor = Color.White;
}
else
{
if (Radius == 0 || RadiusSides == UICornerRadiusSides.None)
e.Graphics.DrawRectangle(RectDisableColor, 0, 0, Width - 1, Height - 1);
else
e.Graphics.DrawRoundRectangle(RectDisableColor, 0, 0, Width, Height, Radius);
edit.BackColor = GetFillColor();
}
} }
private void Edit_LostFocus(object sender, EventArgs e) private void Edit_LostFocus(object sender, EventArgs e)
@ -304,14 +287,13 @@ namespace Sunny.UI
if (!edit.Visible) if (!edit.Visible)
{ {
base.OnPaintFore(g, path); base.OnPaintFore(g, path);
g.FillRoundRectangle(GetFillColor(), new Rectangle(Width - 27, edit.Top, 26, edit.Height), Radius, false);
g.DrawRoundRectangle(rectColor, new Rectangle(0, 0, Width, Height), Radius);
} }
g.FillRoundRectangle(GetFillColor(), new Rectangle(Width - 27, edit.Top, 25, edit.Height), Radius); g.FillRectangle(GetFillColor(), new Rectangle(Width - 27, Radius / 2, 26, Height - Radius));
Color color = GetRectColor(); Color color = GetRectColor();
SizeF sf = g.GetFontImageSize(dropSymbol, 24); SizeF sf = g.GetFontImageSize(dropSymbol, 24);
g.DrawFontImage(dropSymbol, 24, color, Width - 28 + (12 - sf.Width / 2.0f), (Height - sf.Height) / 2.0f); g.DrawFontImage(dropSymbol, 24, color, Width - 28 + (12 - sf.Width / 2.0f), (Height - sf.Height) / 2.0f);
g.DrawLine(RectColor, Width - 1, Radius / 2, Width - 1, Height - Radius);
} }
protected override void OnGotFocus(EventArgs e) protected override void OnGotFocus(EventArgs e)

View File

@ -327,7 +327,11 @@ namespace Sunny.UI
//填充文字 //填充文字
if (ShowText) if (ShowText)
{ {
OnPaintFore(e.Graphics, path); rect = new Rectangle(1, 1, Width - 3, Height - 3);
using (var path1 = rect.GraphicsPath())
{
OnPaintFore(e.Graphics, path1);
}
} }
path.Dispose(); path.Dispose();

View File

@ -643,5 +643,35 @@ namespace Sunny.UI
return Image.FromStream(toImage); return Image.FromStream(toImage);
} }
} }
public static Icon SaveToIcon(this Image img, int size = 16)
{
byte[] pngiconheader = new byte[] { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
using (Bitmap bmp = new Bitmap(img, new Size(size, size)))
{
byte[] png;
using (System.IO.MemoryStream fs = new System.IO.MemoryStream())
{
bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
fs.Position = 0;
png = fs.ToArray();
}
using (System.IO.MemoryStream fs = new System.IO.MemoryStream())
{
if (size >= 256) size = 0;
pngiconheader[6] = (byte)size;
pngiconheader[7] = (byte)size;
pngiconheader[14] = (byte)(png.Length & 255);
pngiconheader[15] = (byte)(png.Length / 256);
pngiconheader[18] = (byte)(pngiconheader.Length);
fs.Write(pngiconheader, 0, pngiconheader.Length);
fs.Write(png, 0, png.Length);
fs.Position = 0;
return new Icon(fs);
}
}
}
} }
} }