5

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ことで、本番コードを入力することを思いとどまらせる可能性のある警告や影響がありますか?

4

1 に答える 1

1

別の質問に対する私の回答にコメントを投稿した人によると、メソッドでの使用LicenseManagerは機能しませんOnPaint

于 2012-07-09T23:13:15.983 に答える