В 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
Преимущество использования структуры Canvas состоит в том, что отдельные элементы управления могут быть нарисованы на заказ и, таким образом, «облегчены» (с точки зрения недвижимости) по сравнению с использованием контейнера MDI. Можно даже использовать режим разработки, чтобы расположить панель мониторинга, а затем переключиться в режим выполнения.