【发布时间】:2017-08-06 22:57:36
【问题描述】:
我有一个用户控件制作一个PointF[] 三角形(用作轨迹栏的滑块)。
double hypotenuse;
double finalPoint;
public PointF Target { get; set; }
public PointF PointB { get; set; }
public PointF PointC { get; set; }
public PointF[] triangle = { new Point(0, 0), new Point(0, 0), new Point(0, 0) };
public TriangleSliderUC()
{
InitializeComponent();
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
PropertyConstructor();
PointConstructor();
Paint += new PaintEventHandler(TriangleSliderUC_Paint);
}
public void PointConstructor()
{
Target = new PointF((int)finalPoint, (int)(hypotenuse * 0.5f));
PointB = new PointF(0, 0);
PointC = new PointF(0, (int)hypotenuse);
triangle[0] = Target;
triangle[1] = PointB;
triangle[2] = PointC;
}
void TriangleSliderUC_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillPolygon(Brushes.Orange, triangle);
}
为了将它用作轨迹栏的拇指,我想将创建的三角形保存为位图,这样它就不必在每次移动时都重新绘制。
我该怎么做?
另外,有没有更好的方法来构建我的代码?我是 C# 新手,对 OOP 不熟悉。
【问题讨论】:
-
在做一个需要绘图的自定义控件时,我通常继承自
PictureBox。绘制一次图像(或在属性更改时重绘),然后将其设置为 Image 属性。不需要自定义 Paint 事件。 -
@James 感谢您的提示!虽然我仍然不完全理解那是什么或我将如何去做。您能否添加答案说明或评论链接以在途中阅读更多内容?