2009-07-29 19 views
1

私は、デザイン時に(フォームデザイナー上の既存のコントロールに新しいコントロールをドラッグして)含めることができる子コントロールのタイプを制限する必要があるコントロールを持っています。特定のタイプではないコントロールを削除するにはどうすればよいですか?

「子」は子供ではありません。しかし、私はコントロールが削除された直後のVisual Studioからのエラーメッセージを取得し、これが動作しているようです

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 

:私はOnControlAddedイベントをオーバーライドすることによってこれを実行しようとしましたこの親の制御。

これはどういう意味ですか?エラーを発生させずにこれをどのように達成できますか?

答えて

1

一般的に、これはControlCollectionとカスタムデザイナーの2つの場所で処理します。カスタムデザイナで

[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); 
     } 
    } 
} 

:あなたのコントロールで

CanParentため

class MyControlDesigner : ParentControlDesigner 
{ 
    public override bool CanParent(Control control) 
    { 
     return (control is ExpandablePanel); 
    } 
} 
+0

+1、それはまだ "子コントロールではありません" と言います。 「YにXをホストすることはできません」というメッセージを発行すると、 – smirkingman

関連する問題