Как сделать UserControl заблокированным на определенную высоту? - PullRequest
3 голосов
/ 02 декабря 2011

Пользователю запрещено изменять размер элемента управления TextBox по вертикали. Высота TextBox привязана к идеальной высоте, которой должно быть текстовое поле.

Более того, Visual Studio даже не предоставляет вам ручки вертикального перетаскивания:

enter image description here

Как мне обеспечить такой же механизм на моем UserControl?

1 Ответ

7 голосов
/ 07 декабря 2011

Я подробно остановлюсь на комментарии Ганса. Вы можете связать специализированный код (называемый Designer) с UserControl, чтобы при размещении его на форме в Visual Studio пользователь был ограничен в способах настройки вашего элемента управления.

  1. Добавьте ссылку на System.Design в ваш проект.

  2. Используйте следующий пример кода:

    [Designer(typeof(FixedHeightUserControlDesigner))]
    public partial class FixedHeightUserControl : UserControl
    {
        private const int FIXED_HEIGHT = 25;
    
        protected override void OnSizeChanged(EventArgs e)
        {
            if (this.Size.Height != FIXED_HEIGHT)
                this.Size = new Size(this.Size.Width, FIXED_HEIGHT);
    
            base.OnSizeChanged(e);
        }
    
        public FixedHeightUserControl()
        {
            InitializeComponent();
    
            this.Height = FIXED_HEIGHT;
        }
    }
    
    public class FixedHeightUserControlDesigner : ParentControlDesigner
    {
        private static string[] _propsToRemove = new string[] { "Height", "Size" };
    
        public override SelectionRules SelectionRules
        {
            get { return SelectionRules.LeftSizeable | SelectionRules.RightSizeable | SelectionRules.Moveable; }
        }
    
        protected override void PreFilterProperties(System.Collections.IDictionary properties)
        {
            base.PreFilterProperties(properties);
            foreach (string p in _propsToRemove)
                if (properties.Contains(p))
                    properties.Remove(p);
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...