.NET,并允许拖放预定义的形状
本文关键字:预定义 拖放 许拖放 NET | 更新日期: 2023-09-27 18:28:39
背景:我是一名web开发人员,希望通过对桌面应用程序进行一些修补来扩展我的技能。这只是为了好玩。
我正在尝试构建一些最小的类似Visio的界面。
在学校的时候,我学习了不少.NET,所以我熟悉Winforms和GDI。我知道我可以很容易地在屏幕上画画并在上面写字
我现在想要的更多的是一种让我的用户在画布上添加"形状"的方式。想想Visio是如何处理流程图表单的,您可以选择所需的形状,然后将其放下并调整(宽度、高度等)。
我可以用一个像矩形这样的简单GDI形状来实现这一点,但在设计各种形状时,我不知道该找什么。
同样,我能想到的最接近的例子是Visio,在那里你可以为数据输入选择一个平行四边形,将其放在画布上,并根据需要进行调整。
到目前为止,我所寻找的成功率最低的包括:
- 自定义形状
- 自定义控件
- 在运行时启用表单设计器
- 基于矢量的形状
关于我应该寻找什么,有什么建议吗?
最好的方法是使用用户控件。创建一个名为Shape的基本用户控件。然后,对于所需的每个形状(例如"线形"),创建一个名为LineShape的类,该类派生自shape。此外,您可能还想创建一个名为IShape的接口。让你的每个形状类实现这个接口。接口应该包含所有形状都需要的方法。例如,您需要在名为EndPoints()的界面中放置一个方法,该方法定义用户可以拖动以调整形状大小的端点。由于每个形状都将派生自一个基本的用户控件,因此它们将已经具有拖放功能。
在每个形状中,都需要使用绘制方法绘制形状。在绘制方法中,可以获得Graphics对象的控制柄,并执行基本操作,如绘制直线、圆或多边形。
您的"画布"也应该是一个用户控件。您需要定义一个List<IShape>
列表来容纳拖放到画布上的每个形状控件。
对于拖放,您只需要在"形状"控件上启用此功能,它就会从所有其他形状继承此功能。在画布上拖动时,您需要确保拖动的数据类型为IShape
,如果是,您将调用DoDragDrop()
,这将允许用户将形状拖到画布上。
如果您需要帮助,请阅读界面和用户控件。
始终记得尝试对接口进行编程,如果你做得足够好,你甚至可以让你的程序支持插件,这样其他开发人员就可以编写似乎与你的应用程序集成的自定义形状。