2013-04-18 1 views
1

Form (또는 파생물)의 부모 만 가질 수있는 컨트롤을 작성하고 싶습니다..NET의 Windows Forms에서 컨트롤의 부모를 특정 형식으로 제한

나는 당신이 TabControl 아닌 부모가 할 수없는 TabControl, 또는 TabPage하는 TabControl 유형 TabPage의없는 아이를 가질 수 없으며, TabPage에이 동작을 비유 할 수 같아요.

그러나 TabControl과 달리 내 Form은 모든 유형의 컨트롤을 허용하지만 내 컨트롤은 부모 유형이 Form 여야합니다. 여기

내가 시도 것입니다 :

  1. 디자이너에서 양식을로드하려고 예외가 발생합니다 :

    public class CustomControl : ContainerControl 
    { 
        protected override void OnParentChanged(EventArgs e) 
        { 
         base.OnParentChanged(e); 
         if (!(this.Parent is Form)) 
         { 
          this.Parent.Controls.Remove(this); 
          throw new ArgumentException("CustomControl can only be a child of Form"); 
         } 
        } 
    } 
    

    이 같은 폼 디자이너에서 일부 바람직하지 않은 효과가 발생합니다.

  2. 폼에서 컨트롤을 제거 할 때 예외가 발생합니다.
  3. 컨트롤의 크기가 제대로 조정되지 않습니다.

이 문제를 해결하는 방법이나 내가 잘못하고있는 부분에 대한 권장 사항을 알려 주시면 감사하겠습니다.

+0

이 제한 사항을 구현하는 데있어 어떤 가치가 있습니까? –

+0

@RyanGates, 컨트롤은 폼의 동작을 변경하며 폼이 아닌 컨트롤에는 적용되지 않습니다. 또한 동작 변경은 Form 수준에서 구현되어서는 안되며 별도의 컨트롤이어야합니다. – series0ne

답변

0

자주 언급했듯이 가장 간단한 답변이 가장 좋은 경우가 많습니다. if 문을 추가하여 모든 사항을 수정했습니다! - 바보 나! 나는 이것을 더 빨리 시도 했어야했다!

public class CustomControl : ContainerControl 
{ 
    protected override void OnParentChanged(EventArgs e) 
    { 
     base.OnParentChanged(e); 
     if (this.Parent != null && !(this.Parent is Form)) 
     { 
      this.Parent.Controls.Remove(this); 
      throw new ArgumentException("CustomControl can only be a child of Form"); 
     } 
    } 
} 
관련 문제