2011-04-25 3 views
4

Paint의 맨 위에있는 양식에서 사용할 수있는 일부 공용 속성을 사용하는 UserControl이 있습니다. 이 UserControl에 대한 이벤트, 나는 컨트롤의 Parent을 참조하고 내 양식의 유형으로 던져.'System.Windows.Forms.Form'형식의 개체를 'Project.Form1'형식으로 캐스팅 할 수 없습니다.

var _parent = (Form1)Parent; 

이 코드는 오류가 발생합니다, 디자인 뷰에서, 그러나 작동하고 나는 UserControl의 장소에 표시되는 모든이 게시물의 제목에 오류를 표시하는 흰색 상자입니다. stacktrace는이 코드 행으로 직접 이어집니다.

는 지금, 나는이 오류를 해결 한 내 UserControl을의 속성을 통해이 캐스트를 다시 라우팅

public Form1 ControlParent 
    { 
     get 
     { 
      if (Parent != null) 
      { 
       return (Form1)Parent; 
      } 
      return null; 
     } 
    } 

이 단지 디자인보기를 나누기 뭔가 조금 더의 일종이다 .. 기타를 아이디어?

+1

디자인 타임에 컨트롤이 표시되는 것을 신경 쓰지 않고 오류 만 사라지기를 원하면 사용자 컨트롤의 Paint 이벤트에서 "DesignMode"속성을 사용할 수 있습니다. if (! DesignMode) { ... 페인트 코드 ...} – Preets

+0

@Preets 와우, 그 또한 매우 유용합니다. 이것을 답으로 게시 했어야하지만, 감사합니다. input = D –

답변

4

코드에 따르면 Control 인스턴스는 이미 ControlParentnull 인 것으로 처리 될 수 있습니다. 따라서 간단한 수정 만

public Form1 ControlParent 
{ 
    get 
    { 
     return Parent as Form1; 
    } 
} 

참고 다음을 수행하는 것입니다 : 일반적으로는 특정 유형의 Control 존재의 Parent에 의존하는 나쁜 생각입니다. 그것은 다른 컨트롤에서 re-hosting되는 것을 방지하고 멋진 디자인 경험을 제공하기 위해 타입을 퍼지 (fudge)하는 디자이너를 깰 수 있습니다. 특정 유형의 Parent과 같은 값에 의존해야하는 경우 다른 유형의 얼굴에서도 충돌하지 않는 폴백 플랜을 사용해야합니다.

+0

위의 코드는 여전히 디자이너를 해칠 것입니다. 이것은 런타임 문제는 아닙니다. 어떤 이유로 인해 Form1의 디자인 뷰는 해당 코드 줄 때문에 UserControl을 표시 할 수 없습니다. 위에서 말한 것처럼 코드는 멋지게 작동하지만 디자인보기에는 어려움이 있습니다. –

+0

@ 카일, 그렇다면'ControlParent'가'null' 값을 반환하면 자식 컨트롤이 처리 할 수없는 것처럼 들립니다. – JaredPar

+0

@JaredPar 컨트롤이 Parent에 대해 null 값을 처리 할 수 ​​있습니다. 캐스트가 문제입니다. 디자인보기에서 컨트롤을 표시하려고하면 onPaint 이벤트가 호출되어 캐스트가 중단됩니다. 나는 이유를 모른다. 그리고 그것이 내가 알아 내려고 노력하는 것이다. –

0

첫 번째 코드에서 부모가 null이 아닌지 확인 했습니까?

0

양식 소유자를 설정 한 다음 부모 속성을 통해 시도하는 방식으로 해당 속성에 액세스하여 시도 할 수 있습니다.

관련 문제