.NET并允许拖放预定义的形状

时间:2012-03-21 01:29:04

标签: c# .net user-interface windows-forms-designer interactive

背景:我是一名网络开发人员,希望通过对桌面应用程序进行一些修改来扩展我的技能。这只是为了好玩。

我正在尝试构建一些最小的Visio界面。

在学校时我做了很多.NET,所以我对Winforms和GDI很熟悉。我知道我可以很容易地在屏幕上画画并写上它。

我现在正在寻找的是让我的用户向画布添加“形状”的更多方法。想想Visio如何使用流程图表单,你选择你想要的形状,你可以放下它并调整它(宽度,高度等)。

我可以通过简单的GDI形状(如矩形)来实现这一目标,但在设计各种形状的形状时,我很遗憾。

我能想到的最接近的例子就是Visio,您可以在其中选择数据输入的平行四边形,然后将其放在画布上并根据需要进行调整。

到目前为止我所寻求的成功率最低,包括:

  • 自定义形状;
  • 自定义控件;
  • 在运行时启用表单设计器;
  • 基于矢量的形状。

关于我应该寻找什么的任何指示?

1 个答案:

答案 0 :(得分:1)

接近它的最佳方法是拥有用户控件。创建一个名为Shape的基本用户控件。然后,对于您想要的每个形状,例如线形,创建一个名为LineShape的类,该类派生自Shape。此外,您可能还想创建一个名为IShape的接口。让每个形状类都实现此接口。接口应包含所有形状都需要的方法。例如,您需要在名为EndPoints()的接口中放置一个方法,该方法定义用户可以拖动以调整形状大小的端点。由于每个形状都将从基本用户控件派生,因此它们已具有拖放功能。

在每个形状中,您都希望在paint方法中绘制形状。在paint方法中,您可以获取Graphics对象的句柄并执行绘制线,圆或多边形等原始事物。

您的“画布”也应该是用户控件。您需要定义一个List<IShape>列表来保存拖放到画布上的每个形状控件。

对于你的拖放,你只需要在Shape控件上启用它,它将从所有其他形状继承它。在拖动到画布上时,您需要确保拖动的数据是IShape类型,如果是,您将调用DoDragDrop(),这将允许用户删除形状在画布上。

如果您需要帮助,请阅读InterfacesUser Controls

永远记得尝试编程到一个界面,如果你做得很好,你甚至可以制作你的程序支持插件,这样其他开发人员就可以编写看似与你的应用程序集成的自定义形状。