У меня есть настраиваемый элемент управления, который содержит 6 панельных элементов управления, которые действуют как контейнеры для других элементов управления, которые удаляются во время разработки. Это было сделано путем создания пользовательского конструктора, наследующего от ParentControlDesign. В дизайнере я использую EnableDesignMode, чтобы включить функциональность времени разработки для каждого элемента управления панелью. Проблема в том, что когда я использую элемент управления, я могу перемещать панели вокруг. Что я могу сделать, чтобы они не двигались во время разработки?Как предотвратить перемещение контейнера в пользовательском контроле во время разработки?
1
A
ответ
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().
Это сработало! Спасибо! –