我希望构建一个应用程序,最终用户可以在运行时将控件拖放到窗体上。我在这个主题上搜索了很多东西,但不确定这种类型的应用程序到底是什么类型的。我搜索过画布应用程序、仪表板应用程序、组件应用程序、小部件、可视化编程和图表。我的设想与Visual风格的界面有点不同,因为我认为每个组件都可以拖到一个表面上,而不是窗口。我已经看到这是使用网格布局或画布样式布局完成的。我并不像在图表中那样需要“连接器”,但是我想要“表面”功能。
我的问题是:
发布于 2012-03-31 16:27:33
在Winforms中,可以通过在单击事件处理程序时将事件处理程序添加到控件中,然后通过在窗体的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应用程序。
http://msdn.microsoft.com/en-us/library/aa984330%28v=vs.71%29.aspx
使用画布结构的好处是,单个控件可以自定义绘制,因此当使用MDI容器进行比较时,可以使用“轻量级”(房地产方面)。甚至可以使用设计模式来布局仪表板,然后切换到运行时模式。
https://stackoverflow.com/questions/9938498
复制相似问题