此链接中接受答案的原始用户控制代码:How to animate dots in UserControl Paint event?
我改变了它一点,并添加了一个选项来保存更改。所以我添加了一些用户设置属性,其中之一是SaveState:
[DefaultValue(false)]
public bool SaveState
{
get => saveState;
set
{
if (value)
{
saveState = value;
}
Properties.Settings.Default.SaveState = value;
Properties.Settings.Default.Save();
}
}
在构造函数中:
public LoadingLabel()
{
InitializeComponent();
SaveState = Properties.Settings.Default.SaveState;
}
问题是当i;我添加了另一行来更新SaveState整个应用程序和Visual Studio崩溃Visual Studio重新开始,而没有将控件拖到form 1设计器。崩溃发生在我进行更改之后,并在将控件拖到form 1设计器时。
这是我改变的:
[DefaultValue(false)]
public bool SaveState
{
get => saveState;
set
{
if (value)
{
saveState = value;
SaveState = value;
}
我又加了一句:
SaveState = value;
因为它正在更新saveState并且工作正常,但是从视觉上看,我没有看到属性SaveState发生变化:
SaveState被设置为true,但是当我将其更改为false时,只有当我移除控件并将其再次拖动到设计器时,才会看到它为false。
不确定在尝试更新SaveState时为什么会崩溃。
1条答案
按热度按时间htzpubme1#
当你写
你叫二传手。
当您在setter的代码中这样做时,这将导致无限递归-您在setter中为
SaveState
赋值,这将调用setter,这将为SaveState
赋值,这将调用setter,这将为SaveState
赋值,这将调用setter,依此类推,直到永远,这将导致IDE崩溃。故事的寓意:NEVER赋值给setter内部的属性;ALWAYS分配给支持字段。