gpt4 book ai didi

c# - Winform自定义控件为什么是 "Object Reference not set to an instance of an object"?

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:07 25 4
gpt4 key购买 nike

我创建了一个具有最大值的自定义控件。添加时 if (DesignMode) Parent.Refresh();它可以编译,但在客户端中会因消息错误而崩溃:

Object Reference not set to an instance of an object

调用堆栈:

at System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(Object component, Object value)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement, CodePropertyReferenceExpression propertyReferenceEx, Boolean reportError)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)

源代码:

[Category("Main")]
[Description("Max Value")]
[DefaultValue(100)]
public int Max
{
get { return _max; }
set {
_max = value;
if (DesignMode)
{
Parent.Refresh();
}
}
}

最佳答案

试试这个:

if (DesignMode && Parent != null)
{
Parent.Refresh();
}

当第一次设置该值时,很可能该控件尚未添加到其父级。

如果查看表单的 *.designer.cs,您会注意到用户控件的属性在被添加到父表单之前被分配。这就是您获得异常的原因。

关于c# - Winform自定义控件为什么是 "Object Reference not set to an instance of an object"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4346504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com