Как удалить элемент управления, если не определенного типа? - PullRequest
1 голос
/ 29 июля 2009

У меня есть элемент управления, необходимый для ограничения типов дочерних элементов управления, которые он может содержать во время разработки (перетаскивание нового элемента управления в существующий элемент управления в конструкторе форм) Я попытался сделать это, переопределив событие OnControlAdded:

Protected Overrides Sub OnControlAdded(ByVal e As System.Windows.Forms.ControlEventArgs)
    MyBase.OnControlAdded(e)

    If e.Control.GetType() IsNot GetType(ExpandablePanel) Then
        MsgBox("You can only add the ExpandablePanel control to the TaskPane.", MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, "TaskPane")

        Controls.Remove(e.Control)
    End If
End Sub

Это похоже на работу, однако я получаю сообщение об ошибке из Visual Studio сразу после удаления элемента управления:

'child' не является дочерним контролем этого родителя.

Что это значит? Как я могу сделать это без ошибок?

1 Ответ

1 голос
/ 01 августа 2009

Как правило, вы хотите обрабатывать это в двух местах: ControlCollection и в пользовательском конструкторе.

В вашем распоряжении:

[Designer(typeof(MyControlDesigner))]
class MyControl : Control
{
    protected override ControlCollection CreateControlsInstance()
    {
        return new MyControlCollection(this);
    }

    public class MyControlCollection : ControlCollection
    {
        public MyControlCollection(MyControl owner)
            : base(owner)
        {
        }

        public override void Add(Control control)
        {
            if (!(control is ExpandablePanel))
            {
                throw new ArgumentException();
            }

            base.Add(control);
        }
    }
}

В вашем конструкторе:

class MyControlDesigner : ParentControlDesigner
{
    public override bool CanParent(Control control)
    {
        return (control is ExpandablePanel);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...