如果您有一个显示数据的表单,您可以做的一件事是在构造函数中引用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
是否有任何警告或暗示可能会阻止我放入我的生产代码?