2011-04-28 70 views
2

我有一個usercontrol(UC1),它根據用戶想要顯示的內容在設計時改變方面。usercontrol在設計時加入另一個用戶控件

  • 一個普通按鈕彈出一個窗口,用戶控件UC2(窗口僅在運行時示出)
  • 的UC2在UC1直接託管(常規按鈕然後未示出)

由於我想在這兩種情況下使用相同的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)在設計師顯示託管表單時正常運行。 – 2011-04-28 16:50:07

相關問題