Вы можете переопределить метод 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 после вставки компонента.