【问题标题】:Error with custom TextBox with checking of Text property检查 Text 属性时自定义 TextBox 出错
【发布时间】:2017-12-03 22:38:41
【问题描述】:

我正在写一个NumberTextbox,它扩展了Winforms 的标准Textbox 类。该类包括以下对 Text 属性的覆盖:

    [DefaultValue("")]
    public override string Text
    {
        get
        {
            return base.Text;
        }

        set
        {
            if (!IsNumber(value))
                throw new FormatException();
            base.Text = value;
        }
    }

构造函数确实将一个空字符串显式插入到 Text 属性中。当我尝试使用设计器将此文本框插入表单时,我得到一个FormatException。用return; 替换投掷线可以解决问题,但在我看来这是错误的。这个问题有更好的解决方案吗?请注意,IsNumber 方法确实会为空字符串返回 true

【问题讨论】:

  • 请在问题中添加IsNumber 实现
  • 你可以考虑在how to make number only textbox阅读这个问题
  • 您可能需要检查答案here 以涵盖处于设计模式(接受的答案可能不适用于您的场景,因此请注意,其他答案提供了针对不同上下文的解决方案)。或者在构造函数中设置base.Text 而不是Text 属性。

标签: c# winforms


【解决方案1】:

不确定为什么您的 IsNumber 方法在设计模式下无法正常工作。解决这个问题的简单方法是,如果您处于设计模式,则不要调用该方法...

        set
        {
            if (!DesignMode && !IsNumber(value))
                throw new FormatException();
            base.Text = value;
        }

设计师以神秘的方式工作,创造奇迹。因此,有时您需要测试设计模式以使其在我的经验中正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多