如何在设计时阻止容器控制在用户控制中移动?

时间:2010-10-31 17:47:11

标签: c# user-controls containers design-time

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

1 个答案:

答案 0 :(得分:3)

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

改变面板的设计行为需要给他们自己的设计师。这是一个执行此操作的示例类:

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