this.DesignMode
データを表示するフォームがある場合、デザイナにデータが入力されないように、コンストラクターで参照することができます。
public partial class SetupForm : Form
{
private SetupItemContainer container = new SetupItemContainer();
public SetupForm()
{
InitializeComponent();
if (!this.DesignMode)
{
this.bindingSource1.DataSource = this.container;
this.Fill();
}
}
}
ただし、同じコンストラクタロジックを維持したまま、そのフォームをUserControlとして書き直すことにした場合、予期しないことが発生します。これは、何this.DesignMode
があっても常にfalseです。これにより、デザイナーは実行時に発生することを意図したロジックを呼び出すことになります。
これを修正しているように見えるブログ投稿にコメントを見つけましたが、UserControlで期待どおりに機能する代替としてLicenseManagerクラスの機能を参照しています。
したがって、UserControlの場合、次のことができます。
public partial class AffiliateSetup : UserControl
{
private AffiliateItemContainer container = new AffiliateItemContainer();
public AffiliateSetup()
{
InitializeComponent();
if (LicenseManager.UsageMode == LicenseUsageMode.Runtime)
{
this.bindingSource1.DataSource = this.container;
this.Fill();
}
}
}
LicenseManager
代わりに使用するDesignMode
ことで、本番コードを入力することを思いとどまらせる可能性のある警告や影響がありますか?