在此链接中,接受答案的原始用户控件代码为:如何在UserControl Paint事件中动画显示点?
我对其进行了一些更改,并添加了保存更改选项。因此,我添加了一些用户设置属性,其中之一是SaveState:
问题在于当我添加另一行以更新SaveState时,整个应用程序和Visual Studio都会崩溃,Visual Studio重新启动,而控件没有被拖到Form1设计器中。崩溃发生在我进行更改后,将控件拖到Form1设计器时。
我添加了这行代码:
因为它正在更新saveState并且运作良好,但是在视觉上我看不到SaveState属性的变化:
SaveState被设置为true,但是当我将其更改为false时,只有当我将控件从设计器中删除并重新拖动它时才会看到它变为false。
[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;
}
问题在于当我添加另一行以更新SaveState时,整个应用程序和Visual Studio都会崩溃,Visual Studio重新启动,而控件没有被拖到Form1设计器中。崩溃发生在我进行更改后,将控件拖到Form1设计器时。
这是我所做的更改:
[DefaultValue(false)]
public bool SaveState
{
get => saveState;
set
{
if (value)
{
saveState = value;
SaveState = value;
}
我添加了这行代码:
SaveState = value;
因为它正在更新saveState并且运作良好,但是在视觉上我看不到SaveState属性的变化:
SaveState被设置为true,但是当我将其更改为false时,只有当我将控件从设计器中删除并重新拖动它时才会看到它变为false。
不确定为什么在尝试更新SaveState本身时会崩溃。
saveState = Properties.Settings.Default.SaveState;
--移除if (value)
,无论value
是true
还是false
,你都需要设置后备字段。你可以检查新的value
是否与存储的值不同,如果相同,则什么也不做,因为重复做同样的事情是没有用的--在这里:SaveState = value;
,你创建了一个递归调用到setter,它会使整个东西崩溃。在属性的setter中,你-再次-设置后备字段,而不是属性。 - Jimi