【问题标题】:RAD of canvas dashboard app winforms画布仪表板应用程序 winforms 的 RAD
【发布时间】:2012-04-13 20:59:08
【问题描述】:
我希望构建一个应用程序,最终用户可以在运行时将控件拖放到表单上。我在这个主题上搜索了很多,但不确定这种类型的应用程序到底叫什么。我搜索了画布应用程序、仪表板应用程序、组件应用程序、小部件、可视化编程和图表。我的愿景与 Visual Studio 风格的界面有点不同,因为我想象每个组件都可以拖动到表面上,而不是窗口。我已经看到使用网格布局或画布样式布局来实现这一点。我并不真正需要图表中的“连接器”,但想要“表面”功能。
我的问题是:
- 是否有允许用户在运行时将控件拖放到表面上的应用程序的特定名称?
- 哪些第三方、开源和商业组件为 WInforms 提供此功能?
- 哪些第三方、开源和商业组件为 WPF 提供此功能?
- 我没有 WPF 方面的经验。这是 Canvas 的“内置”功能吗?
【问题讨论】:
标签:
wpf
winforms
canvas
components
widget
【解决方案1】:
在 Winforms 中可以通过在控件被单击时向控件添加事件处理程序来创建类似于 Canvas 的表面/结构,然后通过在窗体的 MouseMove 事件中添加事件处理程序将控件的位置设置为当前鼠标位置。
示例代码:
bool isDraggable = true;
private void mycontrolClick(object sender, EventArgs e)
{
isDraggable = !isDraggable;
}
private void Form_MouseMove(object sender, MouseEventArgs e)
{
if (isDraggable)
{
Point newLocation = new Point(e.X, e.Y);
myControl.Location = newLocation;
}
}
其他步骤是为此目的(或模式)向控件添加一个可拖动的图标(命中测试)区域,并可能添加某种形式的碰撞检测,如边界框,以便控件相互推动而不是覆盖。最后一步是添加一个序列化例程来保存画布的位置。此外,可能需要冒泡事件/鼠标事件。
另一种解决方案是创建一个传统的 MDI Winforms 应用程序。
http://msdn.microsoft.com/en-us/library/aa984330%28v=vs.71%29.aspx
与使用 MDI 容器相比,使用 Canvas 结构的好处是可以自定义绘制各个控件,因此“重量轻”(房地产方面)。甚至可以使用设计模式来布局仪表板,然后切换到运行时模式。