C# 如何防止容器控件在设计期间在用户控件中移动?

C# 如何防止容器控件在设计期间在用户控件中移动?,c#,user-controls,containers,design-time,C#,User Controls,Containers,Design Time,我有一个自定义控件,它包含6个面板控件,这些控件的作用类似于设计时放入的其他控件的容器。这是通过创建从ParentControlDesign继承的自定义设计器来完成的。在设计器中,我使用EnableDesignMode为每个面板控件启用设计时功能。问题是,当我使用控件时,我可以移动面板。在设计时,如何防止它们移动?我找不到解决此问题的理想解决方案,只是部分解决方案。我假设您按照中的方法为面板启用了设计模式 改变面板的设计行为需要为其指定自己的设计师。下面是一个执行此操作的示例类: using S

我有一个自定义控件,它包含6个面板控件,这些控件的作用类似于设计时放入的其他控件的容器。这是通过创建从ParentControlDesign继承的自定义设计器来完成的。在设计器中,我使用EnableDesignMode为每个面板控件启用设计时功能。问题是,当我使用控件时,我可以移动面板。在设计时,如何防止它们移动?

我找不到解决此问题的理想解决方案,只是部分解决方案。我假设您按照中的方法为面板启用了设计模式

改变面板的设计行为需要为其指定自己的设计师。下面是一个执行此操作的示例类:

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; }
        }
    }
}
用MyPanel替换UC中的面板。自定义SelectionRules属性可确保用户无法轻松地用鼠标将面板拖动到其他位置。但是,“位置”和“大小”特性在特性栅格中仍然是可编辑的。要解决这个问题,我认为您需要重写PreFilterProperties()