Nếu bạn có một mẫu hiển thị dữ liệu, có một điều bạn có thể làm là tham khảo this.DesignMode
trong constructor để tránh Populating nó trong thiết kế:Có bất kỳ cảnh báo nào để hoán đổi DesignMode cho LicenseManager.UsageMode trong một trình tạo WinForms UserControl không?
public partial class SetupForm : Form
{
private SetupItemContainer container = new SetupItemContainer();
public SetupForm()
{
InitializeComponent();
if (!this.DesignMode)
{
this.bindingSource1.DataSource = this.container;
this.Fill();
}
}
}
Tuy nhiên, nếu bạn quyết định viết lại rằng hình thức như một UserControl, giữ cùng một logic của hàm tạo, một cái gì đó bất ngờ xảy ra - this.DesignMode
luôn luôn là false bất kể cái gì. Điều này dẫn đến nhà thiết kế gọi logic của bạn có nghĩa là xảy ra trong thời gian chạy.
Tôi vừa tìm thấy nhận xét về bài đăng trên blog dường như sửa lỗi này nhưng nó tham chiếu chức năng của lớp LicenseManager như là sự thay thế hoạt động như mong đợi trong UserControl.
Vì vậy, đối với một UserControl tôi có thể làm:
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();
}
}
}
Không sử dụng các LicenseManager
thay vì DesignMode
có bất kỳ hãy cẩn thận hoặc hàm ý rằng có thể ngăn cản tôi từ đưa vào mã sản xuất của tôi không?
Khá mơ hồ. Có vẻ như nó không hoạt động trong «OnPaint' vì" tham chiếu vòng tròn "(Có lẽ 'OnPaint' sẽ không kích hoạt ở vị trí đầu tiên nếu mô hình cấp phép không chính xác?) –
@RobertHarvey Tôi đồng ý, đó là khá mơ hồ. Tôi đã không thử nghiệm nó để không thể xác nhận nó là trường hợp, nhưng bình luận có hai upvotes vì vậy tôi cho rằng ít nhất hai người đã gặp phải hành vi. – adrianbanks