Search code examples
c#.netwinformsdesigner

Create a custom control which has a fixed height in designer


I want to create a custom control (derived from Control class), and when I drag this custom control to a form in designer, I can only change its width. This feature is same as single-line textbox.

Update: My application is Windows Form.


Solution

  • See http://www.windowsdevelop.com/windows-forms-general/how-to-set-that-a-control-resizes-in-width-only-9207.shtml.

    You override SetBoundsCore and define a Designer to remove top and bottom resize handles.

    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Windows.Forms.Design;
    
    namespace MyControlProject
    {
        [Designer(typeof(MyControlDesigner))]
        public class MyControl : Control
        {
            protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
            {
                height = 50;
                base.SetBoundsCore(x, y, width, height, specified);
            }
        }
    
        internal class MyControlDesigner : ControlDesigner
        {
            MyControlDesigner()
            {
                base.AutoResizeHandles = true;
            }
            public override SelectionRules SelectionRules
            {
                get
                {
                    return SelectionRules.LeftSizeable | SelectionRules.RightSizeable | SelectionRules.Moveable;
                }
            }
        }
    }