Winforms 如何将UserControl锁定到特定高度?

Winforms 如何将UserControl锁定到特定高度?,winforms,user-controls,Winforms,User Controls,不允许用户垂直调整文本框控件的大小。TextBox的高度被锁定为理想的文本框高度 此外,Visual Studio甚至不提供垂直拖动手柄: 如何在我的用户控件上提供相同的机制?我将详细阐述Hans的评论。您可以将专用代码(称为设计器)与UserControl相关联,以便将其放置在Visual Studio中的窗体上时,用户在配置控件的方式上受到限制 在项目中添加对System.Design的引用 使用以下示例代码: [Designer(typeof(FixedHeightUserControl

不允许用户垂直调整
文本框
控件的大小。
TextBox
的高度被锁定为理想的文本框高度

此外,Visual Studio甚至不提供垂直拖动手柄:


如何在我的
用户控件上提供相同的机制?

我将详细阐述Hans的评论。您可以将专用代码(称为设计器)与UserControl相关联,以便将其放置在Visual Studio中的窗体上时,用户在配置控件的方式上受到限制

  • 在项目中添加对
    System.Design
    的引用

  • 使用以下示例代码:

    [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);
        }
    }
    

  • 它有一个自定义设计器。重写ControlDesigner.SelectionRules属性。@IanBoyd-只需在用户中使textboxs多行属性为false(并锁定该属性)control@JeremyThompson我的
    用户控件
    不包含
    文本框
    -它是一个用户控件。你投入工作来回答问题,你得到+1并接受!请注意,设计器类可以改为继承而不是。这样做将为控件提供与非容器控件相同的“移动”光标-您可以通过单击并拖动控件(几乎)任何位置来移动控件,而不是像使用容器控件那样从某个图标/区域拖动。