官网
http://www.hzhcontrols.com/
前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
GitHub:https://github.com/kwwwvagaa/NetWinformControl
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492
来都来了,点个【推荐】再走吧,谢谢
NuGet
Install-Package HZH_Controls
目录
http://www.hzhcontrols.com/blog-63.html
用处及效果
准备工作
之前的瓶子是朝下的,这里扩展一下 朝上
(五十六)c#Winform自定义控件-瓶子(工业)
开始
增加一个属性
private
Direction direction = Direction.Down;
[Description(
"瓶子方向,默认朝下"
), Category(
"自定义"
)]
public
Direction Direction
{
get
{
return
direction; }
set
{
direction = value;
Refresh();
}
}
|
重绘里面判断朝上的代码
else
{
//写文字
var
size = g.MeasureString(title, Font);
g.DrawString(title, Font,
new
SolidBrush(ForeColor),
new
PointF((
this
.Width - size.Width) / 2,
this
.Height - size.Height - 2));
//画空瓶子
GraphicsPath pathPS =
new
GraphicsPath();
Point[] psPS =
new
Point[]
{
new
Point(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Top),
new
Point(m_workingRect.Right - 1- m_workingRect.Width / 4, m_workingRect.Top),
new
Point(m_workingRect.Right - 1, m_workingRect.Top + 15),
new
Point(m_workingRect.Right - 1, m_workingRect.Bottom),
new
Point(m_workingRect.Left , m_workingRect.Bottom),
new
Point(m_workingRect.Left, m_workingRect.Top + 15),
};
pathPS.AddLines(psPS);
pathPS.CloseAllFigures();
g.FillPath(
new
SolidBrush(bottleColor), pathPS);
//画液体
decimal
decYTHeight = (m_value / maxValue) * m_workingRect.Height;
GraphicsPath pathYT =
new
GraphicsPath();
Rectangle rectYT = Rectangle.Empty;
if
(decYTHeight > m_workingRect.Height - 15)
{
PointF[] psYT =
new
PointF[]
{
new
PointF((
float
)(m_workingRect.Left+(decYTHeight-(m_workingRect.Height-15)))+3,(
float
)(m_workingRect.Bottom-decYTHeight)),
new
PointF((
float
)(m_workingRect.Right-(decYTHeight-(m_workingRect.Height-15)))-3,(
float
)(m_workingRect.Bottom-decYTHeight)),
new
PointF(m_workingRect.Right-1, m_workingRect.Top+15),
new
PointF(m_workingRect.Right-1, m_workingRect.Bottom),
new
PointF(m_workingRect.Left, m_workingRect.Bottom),
new
PointF(m_workingRect.Left, m_workingRect.Top+15),
};
pathYT.AddLines(psYT);
pathYT.CloseAllFigures();
rectYT =
new
Rectangle(m_workingRect.Left + (
int
)(decYTHeight - (m_workingRect.Height - 15)) +1, (
int
)(m_workingRect.Bottom - decYTHeight - 4), m_workingRect.Width - (
int
)(decYTHeight - (m_workingRect.Height - 15)) * 2-2 , 10);
}
else
{
PointF[] psYT =
new
PointF[]
{
new
PointF(m_workingRect.Left,(
float
)(m_workingRect.Bottom-decYTHeight)),
new
PointF(m_workingRect.Right-1,(
float
)(m_workingRect.Bottom-decYTHeight)),
new
PointF(m_workingRect.Right-1,m_workingRect.Bottom),
new
PointF(m_workingRect.Left,m_workingRect.Bottom),
};
pathYT.AddLines(psYT);
pathYT.CloseAllFigures();
rectYT =
new
Rectangle(m_workingRect.Left, m_workingRect.Bottom - (
int
)decYTHeight - 5, m_workingRect.Width, 10);
}
g.FillPath(
new
SolidBrush(liquidColor), pathYT);
g.FillPath(
new
SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathYT);
//画液体面
g.FillEllipse(
new
SolidBrush(liquidColor), rectYT);
g.FillEllipse(
new
SolidBrush(Color.FromArgb(50, Color.White)), rectYT);
//画高亮
int
intCount = m_workingRect.Width / 2 / 4;
int
intSplit = (255 - 100) / intCount;
for
(
int
i = 0; i < intCount; i++)
{
int
_penWidth = m_workingRect.Width / 2 - 4 * i;
if
(_penWidth <= 0)
_penWidth = 1;
g.DrawLine(
new
Pen(
new
SolidBrush(Color.FromArgb(10, Color.White)), _penWidth),
new
Point(m_workingRect.Width / 2, m_workingRect.Top + 15),
new
Point(m_workingRect.Width / 2, m_workingRect.Bottom));
if
(_penWidth == 1)
break
;
}
//画瓶底
g.FillEllipse(
new
SolidBrush(liquidColor),
new
RectangleF(m_workingRect.Left, m_workingRect.Bottom - 5, m_workingRect.Width - 2, 10));
g.FillEllipse(
new
SolidBrush(Color.FromArgb(50, liquidColor)),
new
RectangleF(m_workingRect.Left, m_workingRect.Bottom - 5, m_workingRect.Width - 2, 10));
//画瓶口
g.FillRectangle(
new
SolidBrush(bottleMouthColor),
new
Rectangle(m_workingRect.Left + m_workingRect.Width / 4, m_workingRect.Top - 15 + 1, m_workingRect.Width / 2, 15));
//画瓶颈阴影
GraphicsPath pathPJ =
new
GraphicsPath();
Point[] psPJ =
new
Point[]
{
new
Point(m_workingRect.Left+m_workingRect.Width/4, m_workingRect.Top),
new
Point(m_workingRect.Right-1-m_workingRect.Width/4, m_workingRect.Top),
new
Point(m_workingRect.Right-1, m_workingRect.Top+15),
new
Point(m_workingRect.Left, m_workingRect.Top+15)
};
pathPJ.AddLines(psPJ);
pathPJ.CloseAllFigures();
g.FillPath(
new
SolidBrush(Color.FromArgb(50, bottleMouthColor)), pathPJ);
//写编号
if
(!
string
.IsNullOrEmpty(m_NO))
{
var
nosize = g.MeasureString(m_NO, Font);
g.DrawString(m_NO, Font,
new
SolidBrush(ForeColor),
new
PointF((
this
.Width - nosize.Width) / 2, m_workingRect.Bottom - nosize.Height - 10));
}
}
|
最后的话
如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧