Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;输入字符串格式不正确";withTextbox选择更改事件_C#_Wpf_Textbox_Format - Fatal编程技术网

C# &引用;输入字符串格式不正确";withTextbox选择更改事件

C# &引用;输入字符串格式不正确";withTextbox选择更改事件,c#,wpf,textbox,format,C#,Wpf,Textbox,Format,我想在文本框txtdiscount中输入(双输入),在文本框的SelectionChanged事件中,MessageBox应在其值递增10后显示输入的值。但在上面的代码中,我得到了一个例外: “输入字符串的格式不正确” 第行: private void txtdiscount_SelectionChanged(object sender, RoutedEventArgs e) { try { string dis = txtdiscount.Text.ToStri

我想在文本框
txtdiscount
中输入(双输入),在文本框的
SelectionChanged
事件中,
MessageBox
应在其值递增10后显示输入的值。但在上面的代码中,我得到了一个例外:

“输入字符串的格式不正确”

第行:

private void txtdiscount_SelectionChanged(object sender, RoutedEventArgs e)
{
    try
    {
        string dis = txtdiscount.Text.ToString();
        double isid = double.Parse(dis);

        isid = isid + 10;

        MessageBox.Show(isid.ToString());

    }
    catch (Exception exp)
    {
        MessageBox.Show(exp.ToString());
    }
}
文本框
SelectionChanged
事件中的此代码有什么问题,因为在按钮单击事件中执行相同的代码可以正常工作

string dis = txtdiscount.Text.ToString()

使用&而不是使用事件

根据MSDN

SelectionChanged:-只要选择发生更改,就会发生此事件。选择不仅可以通过用户交互进行更改 但也可以通过绑定以及其他设置值

TextChanged:-如果编程修改或用户交互更改了Text属性,则会引发此事件

使用&而不是使用事件

根据MSDN

SelectionChanged:-只要选择发生更改,就会发生此事件。选择不仅可以通过用户交互进行更改 但也可以通过绑定以及其他设置值

TextChanged:-如果编程修改或用户交互更改了Text属性,则会引发此事件


您的问题是,只要单击
文本框
,就会触发
SelectionChanged
事件。此时,内部没有值,因此
double.Parse()
获取一个空字符串作为输入并抛出此异常。当您从
文本框中删除最后一个数字时,它也会引发异常

要解决此问题,可以检查空值:

 string dis = txtBox.Text;
 double isId;
 if (Double.TryParse(dis, out isId))
 {
      isId = isId + 10;
      MessageBox.Show(isId.ToString());
 }
 else
 {
    MessageBox.Show("Please Only enter Number");
 }
在按钮单击事件中执行相同的代码可以正常工作


因为您在输入有效值后单击。这就是区别

您的问题是,只要单击
文本框
,就会触发
选择更改
事件。此时,内部没有值,因此
double.Parse()
获取一个空字符串作为输入并抛出此异常。当您从
文本框中删除最后一个数字时,它也会引发异常

要解决此问题,可以检查空值:

 string dis = txtBox.Text;
 double isId;
 if (Double.TryParse(dis, out isId))
 {
      isId = isId + 10;
      MessageBox.Show(isId.ToString());
 }
 else
 {
    MessageBox.Show("Please Only enter Number");
 }
在按钮单击事件中执行相同的代码可以正常工作



因为您在输入有效值后单击。这就是差异

dis的值是多少?如果有人在那个文本框中键入
香肠
,会发生什么?看看
double.TryParse
。为什么人们会投反对票?对于新用户来说,这是一个解释得很好的问题。
的可能重复项,但当通过按钮单击事件执行时,相同的代码可以正常工作。
-然后找出为什么
dis
在一种情况下是有效的双精度值,而在另一种情况下不是有效的双精度值。异常具体发生在什么时候?此时文本框中有哪个值?当您从文本框中删除最后一个数字时,是否会引发异常?
dis
的值是多少?如果有人在那个文本框中键入
香肠
,会发生什么?看看
double.TryParse
。为什么人们会投反对票?对于新用户来说,这是一个解释得很好的问题。
的可能重复项,但当通过按钮单击事件执行时,相同的代码可以正常工作。
-然后找出为什么
dis
在一种情况下是有效的双精度值,而在另一种情况下不是有效的双精度值。异常具体发生在什么时候?此时文本框中有哪个值?当您从文本框中删除最后一个数字时,是否会引发异常?无需解析两次!无法编译的代码,请修复它(即使在编辑之后)。原因是未声明
isId
变量。特别是对于新用户,这是一个重要的细节。@Lucifer nice代码现在就可以编译了。如果你能(简而言之)解释一下两者之间的区别,那就更妙了events@MongZhu不,它不会,它将尝试解析空字符串并失败,从而显示要求用户输入数字的消息框(问题是,如果您希望在这种情况下显示消息框,但这是OP应该决定并可以轻松解决的问题)无需解析两次!无法编译的代码,请修复它(即使在编辑之后)。原因是未声明
isId
变量。特别是对于新用户,这是一个重要的细节。@Lucifer nice代码现在可以编译了。如果您能解释一下(简而言之),它会变得更漂亮两者的区别events@MongZhu不,它不会,它将尝试解析空字符串并失败,从而显示要求用户输入数字的消息框(问题是您是否希望在这种情况下显示消息框,但这是OP应该决定并可以轻松解决的问题)谢谢亲爱的Mong Zhu.解释得很好,如果我输入“xyz”,我就得到了解决方案在您的代码中,它是否仍将执行与之前相同的操作?@Lucifer是的,我想这就是OP编写try/catch子句的原因。为了通知用户格式错误。我想他们不希望在第一次单击时显示消息框而没有任何原因@Lucifer Exception在输入“xyz”时抛出 etc@shakeelahmad您应该使用
TryParse()
而不是依赖try-catch。基于catch的代码通常不是一个好的实践Hanks亲爱的Mong Zhu..解释得很好,如果输入“xyz”,我就得到了解决方案在您的代码中,它是否仍将执行与之前相同的操作?@Lucifer是的,我想这就是OP编写try/catch子句的原因。为了通知用户格式错误。我想他们不希望在第一次单击时显示消息框而没有任何原因@Lucifer Exception在输入“xyz”时抛出etc@shakeelahma
private void txtdiscount_SelectionChanged(object sender, RoutedEventArgs e)
{
    try
    {
        if (!string.IsNullOrWhiteSpace(txtdiscount.Text))
        {

            string dis = txtdiscount.Text;
            double isid = double.Parse(dis);

            isid = isid + 10;

            MessageBox.Show(isid.ToString());
        }

    }
    catch (Exception exp)
    {
        MessageBox.Show(exp.ToString());
    }
}