本人想自定义控件,然后重新编写个上位机软件,在这个上位机软件的界面上点击自定义的控件拖拽到画板上进行作图。
相似于Windows画图工具,里面有很多图形模板,直接点击就可以生成相应的图形。
但是本人想要做的并不只是这些,这些对应的图形还具有按钮的功能,它可以有颜色变动,可以显示数字编码,可以用鼠标拖拽进行放大缩小。
本人想到的假如用直线来作图的话,那么比较复杂的不规则的图形又怎么能组成一个整体,然后具有以上功能呢?
小弟还只是个菜鸟,希望有高手可以鼎力相助!
先谢啦!
相似于Windows画图工具,里面有很多图形模板,直接点击就可以生成相应的图形。
但是本人想要做的并不只是这些,这些对应的图形还具有按钮的功能,它可以有颜色变动,可以显示数字编码,可以用鼠标拖拽进行放大缩小。
本人想到的假如用直线来作图的话,那么比较复杂的不规则的图形又怎么能组成一个整体,然后具有以上功能呢?
小弟还只是个菜鸟,希望有高手可以鼎力相助!
先谢啦!
解决方案
30
一种方案
public partial class Shape : UserControl
{
public Shape()
{
InitializeComponent();
MouseDown += new MouseEventHandler(OnMouseDown);
MouseMove += new MouseEventHandler(OnMouseMove);
}
protected override void OnLoad(EventArgs e)
{
dat.Add(new PointF(0, 0));
dat.Add(new PointF(Width, Height / 2));
dat.Add(new PointF(Width / 2, Height));
}
List<PointF> dat = new List<PointF>();
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//SendToBack();
BringToFront();
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
using (var path = new GraphicsPath())
{
path.AddLines(dat.ToArray());
g.DrawPath(Pens.Red, path);
path.Widen(new Pen(Color.Green, 1));
Region = new Region(path);
}
}
int ox, oy;
void OnMouseDown(object sender, MouseEventArgs e)
{
ox = e.X;
oy = e.Y;
BringToFront();
}
void OnMouseMove(object sender, MouseEventArgs e)
{
Cursor = Cursors.Hand;
if (e.Button == MouseButtons.Left)
{
Top += e.Y - oy;
Left += e.X - ox;
}
}
}
10
panel.Controls.Add了不?