在WinForms UserControl构造函数中是否需要更换DesignMode for LicenseManager.UsageMode?

时间:2012-07-09 22:58:52

标签: c# winforms user-controls

如果您有一个显示数据的表单,您可以做的一件事是在构造函数中引用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。这导致设计者调用您的逻辑,这些逻辑意味着在运行时发生。

我刚刚在博客文章中发现了一条评论,似乎对此进行了修复,但它引用了LicenseManager类的功能作为替换,在UserControl中按预期工作。

因此对于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是否有任何警告或暗示可能会阻止我放入我的生产代码?

1 个答案:

答案 0 :(得分:1)

根据my answer to another question发表评论的人所说,使用LicenseManager无法使用OnPaint方法。