我创建了一个具有最大值的自定义控件。当添加if(DesignMode)Parent.Refresh();时 它可以编译,但是在客户端中它会因消息错误而崩溃:
你调用的对象是空的
调用堆栈:
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)
Run Code Online (Sandbox Code Playgroud)
源代码:
[Category("Main")]
[Description("Max Value")]
[DefaultValue(100)]
public int Max
{
get { return _max; }
set {
_max = value;
if (DesignMode)
{
Parent.Refresh();
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试这个:
if (DesignMode && Parent != null)
{
Parent.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
首次设置该值时,控件很可能尚未添加到其父级。
如果查看窗体的* .designer.cs,您会注意到在将usercontrol的属性添加到父窗体之前已对其进行了分配。这就是为什么您会得到例外。
| 归档时间: |
|
| 查看次数: |
8838 次 |
| 最近记录: |