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