You have to store a reference to the DesignerVerb instance you create to represent the custom verb. You can then update the state of the verb through this reference. Here is an example:
public class MyControlDesigner : ParentControlDesigner
{
private DesignerVerb removeVerb;
private DesignerVerbCollection verbs;
...
public override /*ParentControlDesigner*/ void Initialize(IComponent component)
{
//...
// Update your designer verb whenever ComponentChanged event occurs.
iComponentChangeService = (IComponentChangeService) this.GetService(typeof(IComponentChangeService));
if (iComponentChangeService != null)
iComponentChangeService.ComponentChanged += new ComponentChangedEventHandler(this.ComponentChanged);
}
protected override void Dispose(bool disposing)
{
...
if (iComponentChangeService != null)
iComponentChangeService.ComponentChanged -= new ComponentChangedEventHandler(this.ComponentChanged);
}
public override DesignerVerbCollection Verbs
{
get
{
if (this.verbs == null)
{
this.removeVerb = new DesignerVerb('Remove Tab', new EventHandler(this.OnRemove));
this.verbs = new DesignerVerbCollection();
this.verbs.Add(this.removeVerb);
}
this.removeVerb.Enabled = (this.Control.Controls.Count > 0);
return this.verbs;
}
}
private void UpdateVerbStatus()
{
if (this.removeVerb != null) this.removeVerb.Enabled = (this.Control.Controls.Count > 0);
}
private void CheckVerbStatus(object sender, ComponentChangedEventArgs e)
{
this.UpdateVerbStatus();
}
}
Permalink