您可以覆盖OnParentChanged
组件的方法,该方法在组件粘贴到表单时执行。然后测试该DesignMode
属性以确保您处于设计模式:
public class MyComponent : Label
{
protected override void OnParentChanged(EventArgs e)
{
if (DesignMode) {
// Change properties as desired.
Text = "Design";
}
base.OnParentChanged(e);
}
}
从工具箱中删除组件时,不会执行此代码。(我无法解释原因,但它恰好正是我们所需要的。)
如果您从 派生组件System.ComponentModel.Component
,则可以覆盖该属性Site
;但是,这将需要更多的逻辑来检查组件是否已被粘贴。
public override ISite Site
{
get {
return base.Site;
}
set {
base.Site = value;
if (value?.Container is IDesignerHost dh &&
dh.TransactionDescription == "Paste components") {
MessageBox.Show("Pasted");
}
}
}
Undo
但可能事务描述已本地化,因为它是您在粘贴组件后在 Visual Studio 工具栏上的按钮下拉菜单中看到的文本。