TextBox(null; string.IsNullOrEmpty)TextChanged中的问题

时间:2013-11-12 15:30:32

标签: c# string null windows-phone textchanged

检查textBox是否为空时出现问题。 我在这里已经阅读了很多问题和答案,并且我使用了所提到的代码,但没有运气。

我只是想检查一个textBox是否为空,如果是,那么就做一些事情,如果没有,做另外的事情。

到目前为止,我已尝试过以下代码:

(textBox4 != null && !string.IsNullOrEmpty(textBox4.Text))
(textBox4.Text == "")
(!String.IsNullOrEmpty(textBox4.text)
(textBox4.Text != Stirng.Empty)
(textBox4.Text.Trim() == "")
(textbox4.Text.Length == 0)

没有任何代码显示任何错误,但它们仍然无法正常工作。 以下是我正在尝试做的完整代码:

     private void textBox4_TextChanged(object sender, TextChangedEventArgs e)
   {
    try
        {
            double a = Convert.ToDouble(textBox10.Text);                
            double c = Convert.ToDouble(textBox2.Text);
            double d = Convert.ToDouble(textBox3.Text);
            double ee = Convert.ToDouble((0.13 * d) * 2);

            if (string.IsNullOrEmpty(textBox4.Text))
            {
                textBox15.Text = Math.Round((((((ee / 2) / c) * 0.13) + (d * 0.13)), 4).ToString();
            }
            else
            {
                textBox15.Text = (((((a / 2) / c) * 0.13) + (d * 0.13)) / b).ToString(); 
            }
        }
        catch
        {
        }
    }

(textBox 3,10,15是IsReadOnly =“True”,键盘是InputScope =“Number”,如果这很重要)

我做错了什么?我觉得我已经测试了所有代码,我不明白为什么它不检查textBox4是否为空。

修改: 当我在textBox4中写一些东西时,代码可以工作,当我从textBox4中删除它时,它会检测到textBox4是空的(但是已经很晚了)

编辑2 : textBox15的相同If / Else代码是在TextChanged事件下为所有其他相关文本框写的(1,2,3,4,10,15)。

当我在If和Else语句上放置一个断点时,它只在以下时间执行:

  • 只有当我在textBox4中键入内容然后将其删除时,代码才适用于If语句。

  • 只有当我输入内容然后将其删除,然后再重新输入时,它才适用于Else语句。

7 个答案:

答案 0 :(得分:1)

您是否尝试过!string.IsNullOrEmpty(textBox4.Text.Trim())?

这应该可以帮助您删除文本框中可能仍然存在的任何空格。

答案 1 :(得分:1)

“它以某种方式检测不到textBox4是空的,没有任何反应。当我填写textBox4时,代码有效。”

所以我理解您希望运行此代码并调用“textBox4_TextChanged”方法是正确的吗?因为它看起来像只在textBox4 更改

时才会调用的事件处理程序

事实上,如果语句不是问题,那么你的整个方法最初都不会被调用。

如果您在textBox4中填写某些内容然后将其删除以便更改为空,会发生什么? 我敢打赌你的代码可以正常工作。

因此,您希望正确初始化您的textBox15值:)

当你的程序启动时,只需将正确的值(当textBox4为空时)分配给textBox15 :)这可以在你的表单的构造函数中,或者当你创建textBox15时,我不知道你是如何设置的你项目的其余部分。

额外提示:使用调试器并在if语句上设置断点,您会注意到您的代码永远不会被执行直到您实际更改值textBox4。 (虽然该方法的名称也应该是一个提示;))

答案 2 :(得分:1)

如果它开始处理TextChanged事件,则表示您的textBox4不再为空,因为您已在textBox4中输入内容。即使你输入的只是空格,它仍然会调用textBox4_TextChanged方法。

所以我认为你不应该在textBox4_TextChanged方法中放置textBox4检查行。

答案 3 :(得分:1)

好的,我已经通过 string.IsNullOrWhiteSpace 方法解决了我自己的问题。

  

"我只是想检查一个textBox是否为空,如果是,那么做一些事情,如果没有,做另外的事情。"

以下是代码的工作原理:

  private void textBox4_TextChanged(object sender, TextChangedEventArgs e)

try
        {
            if (string.IsNullOrWhiteSpace(textBox4.Text))
            {
                //do something
            }
        }

        catch
        {
        }

谢谢大家的帮助:)

答案 4 :(得分:0)

如果跳转到事件处理程序,Textbox4不能为null。所以我建议使用

"if (!string.isNullOrEmpty(TextBox4.Text))"

正如其他人提到的只是使用调试器。通常使用F5在Winforms中运行良好。

如果您完全确定该文本框中没有任何内容且条件仍无效,请检查您的设计器文件,如果textbox4_TextChanged REALLY已分配给TextBox4。

但我再说一遍:只需使用调试器来查看使用F10

逐步执行代码会发生什么

答案 5 :(得分:0)

我不明白为什么你的 (textBox4 != null && !string.IsNullOrEmpty(textBox4.Text))无效但是,在使用IsNullOrEmpty时,您不需要像在那里那样检查null。 尝试将您的值放入字符串,然后检查null或空。

更新:在阅读您的评论后,我认为您需要撤消if条件,  当用户输入您需要执行其他条件的内容时,因此当您在textbox4中输入内容时,在textBox4_TextChanged事件上,textbox4不为空,因此您只需检查业务逻辑或更改条件。

string strtxt4 = Convert.toString(textBox4.text);

if (string.IsNullOrEmpty(strtxt4 ))
        {
            textBox15.Text = Math.Round(((((((ee / b) + c) * b) * 0.0025) + (d * 0.0025)) / b), 4).ToString();
        }
        else
        {
            textBox15.Text = ((((((a / b) + c) * b) * 0.0025) + (d * 0.0025)) / b).ToString(); 
        }

答案 6 :(得分:0)

尝试使用验证事件。 我已经尝试了相同的,我认为根据我的意见,这很好。 保持逻辑相同,但在验证事件中编写代码。 如果我错了,请通知我。