C# 在设计器中访问UserControl构造函数中的静态数据存在错误
我需要在加载UserControl时访问外部数据(在构造函数或加载事件中) 它在运行模式下工作正常,但在VS Designer模式下会引发NullReferenceException,因为在实例中静态数据未实例化C# 在设计器中访问UserControl构造函数中的静态数据存在错误,c#,winforms,user-controls,C#,Winforms,User Controls,我需要在加载UserControl时访问外部数据(在构造函数或加载事件中) 它在运行模式下工作正常,但在VS Designer模式下会引发NullReferenceException,因为在实例中静态数据未实例化 public partial class MyControl : UserControl { public MyControl() { InitializeComponent(); // Problem when accessing e
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
// Problem when accessing external data
Foo( AnotherClass.MyStaticData );
}
private void Foo(Data d)
{
//...
}
}
如何执行行
Foo(AnotherClass.mystaticata)代码>来自控件?在自定义控件中,您可以检查它们是否处于设计模式,以及行为是否不同。例如,可以提供默认值,而不是缺少的静态类属性,以便设计器可以呈现设计时间控件
在本页中,您有很多关于此的信息:
属性是。我回答自己,这是解决方案:
使用ISite.DesignMode
显然无法在UserControl环境下工作,因此我在这里找到了一个可靠的解决方案:
显然,不可能访问设计器中的实际静态数据。因此,唯一的解决方案是在设计时提供假人。结合56ka和JotaBe的答案,以下是解决问题的方法:
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
if(LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{// Use a dummy value for display at design time.
Foo(desginDummyValue);
}
else
{// Use the real static data only at runtime
Foo( AnotherClass.MyStaticData );
}
}
}
CtrlsSymbolsGrid.cs所做的看起来不像是错误所在。错误出现在CtrlSymbolsGrid\u Load
@K.B它没有真正的重要性,这个问题是在我更改访问静态数据的方式时发生的。@johns如果你说得对,当我试图在Load EventConvertification中移动该行时,屏幕显示:设计模式
在控件以其他形式使用时没有帮助,你有什么想法吗?对这个问题作更深入的解释。我不明白“以其他形式使用控件”是什么意思。我将它用于WebForms,而不是WinForms,在其他控件中嵌套控件时没有任何问题。我的意思是将UserControl
用作其他表单中的.NET组件。UserForm的构造函数使调用表单抛出异常请编辑您的问题,对您的操作给出更详细的解释:用户控件的完整代码,以及如何抛出异常。如果我能理解并复制它,也许我能给你更多的提示。谢谢你JotaBe,你为我铺路,现在我找到了最终的解决方案,我在原始帖子中写道:)
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
if(LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{// Use a dummy value for display at design time.
Foo(desginDummyValue);
}
else
{// Use the real static data only at runtime
Foo( AnotherClass.MyStaticData );
}
}
}