2010-10-31 1 views
1

У меня есть настраиваемый элемент управления, который содержит 6 панельных элементов управления, которые действуют как контейнеры для других элементов управления, которые удаляются во время разработки. Это было сделано путем создания пользовательского конструктора, наследующего от ParentControlDesign. В дизайнере я использую EnableDesignMode, чтобы включить функциональность времени разработки для каждого элемента управления панелью. Проблема в том, что когда я использую элемент управления, я могу перемещать панели вокруг. Что я могу сделать, чтобы они не двигались во время разработки?Как предотвратить перемещение контейнера в пользовательском контроле во время разработки?

ответ

2

Я не мог найти идеальное решение для этой проблемы, только частичное. Я предполагаю, что вы включили режим проектирования для панелей после подхода в this answer.

Изменение конструктивного поведения панелей требует предоставления им собственного дизайнера. Вот пример класса, который делает это:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 

[Designer(typeof(MyPanelDesigner))] 
public class MyPanel : Panel { 
    private class MyPanelDesigner : ScrollableControlDesigner { 
     public override SelectionRules SelectionRules { 
      get { return SelectionRules.None; } 
     } 
    } 
} 

Замените панели в UC MyPanel. Собственное свойство SelectionRules гарантирует, что пользователь не может легко перетащить панель в другое положение с помощью мыши. Свойства Location и Size, однако, доступны для редактирования в сетке свойств. Чтобы избавиться от этого, я думаю, вам нужно переопределить PreFilterProperties().

+0

Это сработало! Спасибо! –