2011-04-28 18 views
2

私は、ユーザーが表示したいと思うように設計時にアスペクトを変更するユーザーコントロール(UC1)を持っています。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でホストされているため、デザインモードになっていることがわかります。 2番目のUserControlは、最初のUserControlでホストされます。そのホストはDesignerではないため、通常のコンテナ内にあると考えられ、それに応じて動作します。それを解決するには少し手間がかかります。AFAIKを使うのは簡単な解決策ではありません。 Hereいくつかの回避策があります。もう一つは、Site.DesignModeを再帰的にテストすることですが、コントロールの深さのレベルに依存します。

+0

私はすでにデザインモードをテストしていることは知っていますが、このフラグをテストしてUC2を「デザインモード」にすることができないため、役に立たないことがあります。さらに、UC1(UC2が表示されている)は、ホスティングフォームが設​​計者に表示されたときに正常に動作します。 –

関連する問題