【问题标题】:Textbox "locks" when value is null (integer is expected)当值为空时文本框“锁定”(需要整数)
【发布时间】:2012-03-12 19:38:23
【问题描述】:

我正在使用 vs2010 和本地数据库的 c# windows 应用程序中工作。在我的一种形式中,我使用的是 bindingNavigator,并且我插入了一些文本框,其中一些文本框只需要用整数填充。

问题是,当我从其中一个文本框中删除所有数据时,鼠标被锁定,除非在文本框中插入至少一个数字,否则我无法移动到另一个文本框或关闭程序。当没有插入任何内容并能够继续导航到程序中时,如何使其自动完成为 0?

【问题讨论】:

  • 99.99% 的时间在 SO 上,需要代码来帮助回答问题。
  • 我能用这样的东西吗:int test = 0; if(textbox1.Text==null){textbox1.Text = test.ToString();} 在哪个事件中?
  • 解决方案真的很简单,问题出在 textbox.Text==null 表达式中。在文本框的离开事件中,我只使用了代码: if (nameTextBox.Text == "") { nameTextBox.Text = "0"; }

标签: c# winforms visual-studio-2010 textbox sql-server-ce


【解决方案1】:

如果你有很多这样的控件,为每个控件编写这个条件是很无聊的。您可以只继承 TextBox 控件:

public partial class NumberTextBox : TextBox
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }

        private void NumberTextBox_Leave(object sender, EventArgs e)
        {
            string tTxt = ((TextBox)sender).Text;
            double tDbl;
            int tInt;
            if (tTxt == "" || !double.TryParse(tTxt, out tDbl) || !int.TryParse(tTxt, out tInt))
            {
                ((TextBox)sender).Text = "0";
            }
        }
    }

【讨论】:

    【解决方案2】:

    我看到您找到了解决方案,但您确实想使用:

    if (string.IsNullOrEmpty(nameTextBox.Text)){ nameTextBox.Text = "0"; } 
    

    填写一个零,然后在 int.Parse 上使用 int.TryParse:

    int n;
    if(!int.TryParse(nameTextBox.Text, out n))
    {
    //handle failed parse
    }
    ...
    

    这样可以避免整数转换不可能时可能出现的异常(例如输入字母)

    【讨论】:

      【解决方案3】:

      解决方案真的很简单,问题出在 textbox.Text==null 表达式中。在文本框的离开事件中,我只使用了代码:

      if (nameTextBox.Text == "") 
      { 
      nameTextBox.Text = "0";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多