绘制线条的简单代码。
using (Graphics g = this.CreateGraphics())
{
g.DrawLine(Pens.Black, new Point(50, 50), new Point(100, 100));
}
这将绘制一条典型的线条。但是我希望这行可以选择,以便用户可以在运行时进一步操作它(拉伸,调整大小等)。最初我尝试使用可以在运行时使用该行作为背景进行操作的控件,但由于重叠控件问题而无法工作。
我的问题是如何在运行时选择此行?
答案 0 :(得分:2)
你需要自己写。
等...
或者只使用:piccolo2d framework
结构化2D图形框架
答案 1 :(得分:0)
我认为您要做的是使Graphics对象可以选择吗? 如果是这样,您可以将您的逻辑放入MouseOver和MouseButton事件中。 看看这个,它可能会给你一些见解。
答案 2 :(得分:0)
您必须自己创建。声明图形对象实现的接口。建议:
public interface IObject
{
bool HitTest(Point mouseLocation);
void Paint(Graphics g);
List<IAdorner> Adorners { get; }
}
public interface IAdorner
{
bool HitTest(Point mouseLocation);
void Paint(Graphics g);
void StartMoving(Point mouseLocation);
void Move(Point mouseLocation);
}
例如,装饰线是线对象的可选端点。
您的主要涂料程序将如下所示:
private void drawingSurface_Paintobject sender, PaintEventArgs e)
{
foreach (IObject o in _objects) {
o.Paint(e.Graphics);
if (o == _selectedObject) {
foreach (IAdorner a in o.Adorners) {
a.Paint(e.Graphics);
}
}
}
}
因为您需要处理所有鼠标事件。
这些接口足够抽象,以便允许实现任何形状。例如,它们不包括任何坐标,因为不同类型的对象需要不同数量和种类的坐标和参数。
答案 3 :(得分:0)
也许有点太晚了,因为你已经接受了答案,但你应该真的考虑WPF。
https://stackoverflow.com/a/15469477/643085
这是您在WPF + MVVM中完成的完整示例。与任何winforms方法相比具有真正的全部优势(例如由于硬件加速而无闪烁)。
请至少试一试。完整的CSProj项目可用资源。
你真的在GDI中自己重新启动了这一轮。最后,由于闪烁和类似的东西,它将无法使用。