我有一个"数字文本框"。净是没有什么比一个派生的文本,有一些增加的逻辑,以防止用户进入任何非数字。作为其中的一部分,我们增加了一个价值财产的类型 double? (或 Nullable<double>).这就可以为空支持的情况下,用户不能进入任何东西。

控制正常工作时运行,但Windows形式的设计师似乎并不喜欢处理它了。当控制加入一形式中,以下代码行被中产生的InitializeComponent():

this.numericTextBox1.Value = 1;

记得"价值"的类型 Nullable<double>.此产生的以下警告,每当我试图重新打开的形式在设计师:

Object of type 'System.Int32' cannot be converted to type 'System.Nullable`1[System.Double]'.

结果,形式不能被视为在设计师,直到我手动删除该行和重建-之后的再生,只要我保存的任何变化。讨厌。

任何建议?

有帮助吗?

解决方案

或者,如果你不想的设计中添加任何代码...这增加了财产。

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

其他提示

看来,有一个问题在Visual Studio2008年。你应该创造定义CodeDomSerializer工作:

public class CategoricalDataPointCodeDomSerializer : CodeDomSerializer
{
    public override object Deserialize(IDesignerSerializationManager manager, object codeObject)
    {
        CodeStatementCollection collection = codeObject as CodeStatementCollection;

        if (collection != null)
        {
            foreach (CodeStatement statement in collection)
            {
                CodeAssignStatement codeAssignment = statement as CodeAssignStatement;

                if (codeAssignment != null)
                {
                    CodePropertyReferenceExpression properyRef = codeAssignment.Left as CodePropertyReferenceExpression;
                    CodePrimitiveExpression primitiveExpression = codeAssignment.Right as CodePrimitiveExpression;

                    if (properyRef != null && properyRef.PropertyName == "Value" && primitiveExpression != null && primitiveExpression.Value != null)
                    {
                        primitiveExpression.Value = Convert.ToDouble(primitiveExpression.Value);
                        break;
                    }
                }
            }
        }

        return base.Deserialize(manager, codeObject);
    }
}

那么你应该将其应用的使用 DesignerSerializer 属于你的类。

能有助于设置的 默认值属性 在那酒店的新Nullable(1)?

[DefaultValue(new Nullable<double>(1))]  
public double? Value ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top