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

Joh*_*res 2 c# user-controls containers design-time

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

Han*_*ant 5

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

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

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; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用 MyPanel 替换 UC 中的面板。自定义 SelectionRules 属性确保用户无法轻松地使用鼠标将面板拖动到另一个位置。然而,位置和大小属性仍然可以在属性网格中编辑。为了摆脱这一点,我认为您需要覆盖 PreFilterProperties()。