2011-04-28 5 views
2

사용자가 표시하려고하는대로 디자인 타임에 aspect를 변경하는 usercontrol (UC1)이 있습니다.usercontrol 디자인 타임에 프로그래밍 방식으로 다른 사용자 컨트롤 추가

  • UserControl을 UC2 (창이 런타임에만 도시 됨)으로 창을 팝업 정규 버튼
  • 직접 (통상 버튼이어서 도시되지 않음)

이후 UC1에서 주최 UC2 두 상황 모두에서 동일한 UC2 인스턴스를 사용하고 싶습니다. UC1과 양식간에 소유권을 양도합니다.

public UC1() 
{ 
    _uc2 = new UC2(); 
} 

public bool DisplayModeSimple 
{ 
    get { return _displayModeSimple; } 
    set 
    { 
     _displayModeSimple = value; 
     if (_displayModeSimple) 
     { 
      // ... Verify if _uc2 is already in Controls... 
      Controls.Remove (_uc2); 
      uiButton.Visible = true; 
     } 
     else 
     { 
      // ... Verify that _uc2 is not in Controls ... 
      Controls.Add (_uc2); 
      uiButton.Visible = false; 
     } 
    } 
} 

private void HandleButtonClick (object sender, EventArgs e) 
{ 
    // Not called if DisplayModeSimple=false since button is hidden... 
    using (var form = new PopupForm (_uc2)) 
    { 
     form.ShowDialog (this); 
    } 
} 

디자인 모드와 런타임 모드에서 모두 잘 작동합니다.

디자인 모드에서 디스플레이 모드를 변경하면 UC1이 올바르게 작동합니다.

그러나 런타임시 UC2의 컨트롤을 클릭 할 수 있습니다. 그런 다음 UC1 호스팅 양식을 닫았다가 다시 열면 모든 것이 정상으로 돌아갑니다. 즉, UC2의 모든 컨트롤을 "클릭"할 수 없습니다.

답변

0

문제는 첫 번째 UserControl이 VS에서 호스팅되므로 디자인 모드에 있음을 알 수 있습니다. 두 번째 UserControl은 첫 번째 UserControl에서 호스팅되므로 호스트가 Designer가 아니므로 일반 컨테이너에 있다고 생각하고 그에 따라 동작합니다. AFAIK 솔루션이 없기 때문에 해결 방법은 약간 까다 롭습니다. Here 몇 가지 대안을 찾을 수 있습니다. 다른 하나는 Site.DesignMode를 재귀 적으로 테스트하는 것이지만 컨트롤의 깊이 수준에 따라 다릅니다.

+0

좋아, 이미 디자인 모드 테스트에 대해 알고 있지만이 플래그를 테스트하고 UC2를 "디자인 모드"로 설정할 수있는 곳이 없기 때문에 도움이되지 않습니다. 또한 UC1 (UC2가 표시된 상태)은 호스팅 양식이 설계자에게 표시 될 때 정상적으로 작동합니다. –

관련 문제