Как предотвратить перемещение управления контейнером в пользовательском контроле во время разработки? - PullRequest
2 голосов
/ 31 октября 2010

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

1 Ответ

3 голосов
/ 31 октября 2010

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

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

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 ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...