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());
}
}