3

WinForm デザイナで UserControl をロードすると、VisualStudio はコントロールの InitializeComponent() メソッドを実行しますが、コンストラクタは実行しません。設計時に実行できないコードがコンストラクターに含まれていることは非常に一般的であるため、これは本当に違いを生みます。

残念ながら、UserControl を別のコントロールに追加すると、VisualStudio は親コントロールの InitializeComponent() メソッドを実行し、子コントロールのコンストラクターを呼び出します。これらのコンストラクターで例外が発生した場合、スタックします。

この問題にどう対処しますか?

4

4 に答える 4

2

ランタイムのみの部分を次のようにラップします。

If Not me.DesignMode Then
  'Runtime only here
End If
于 2009-01-26T16:15:21.383 に答える
1

CodeProject で解決策を見つけました。

if (System.ComponentModel.LicenseManager.UsageMode != 
    System.ComponentModel.LicenseUsageMode.Designtime)
{
    // Runtime only here
}
于 2011-11-30T13:23:30.240 に答える
0

このシナリオで OnLoadEvent を使用しないのはなぜですか?

于 2009-01-26T16:15:57.357 に答える
0

私が使用している回避策は、トップレベル コンストラクターから再帰的に呼び出す InitializeRuntime() メソッドにランタイム初期化コードを配置することです。これで問題は解決しますが、デザイナーを使用してコンポーネントをドラッグアンドドロップするのではなく、追加するすべての UserControl に対して InitializeRuntime() への呼び出しを追加することを常に覚えておく必要があります。

于 2009-01-26T16:04:39.580 に答える