Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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#WPF中使用int.TryParse?_C#_Wpf_Tryparse_Integerupdown - Fatal编程技术网

如何在比较指令C#WPF中使用int.TryParse?

如何在比较指令C#WPF中使用int.TryParse?,c#,wpf,tryparse,integerupdown,C#,Wpf,Tryparse,Integerupdown,我有两个IntegerUpDown控件,需要在MouseLeave_事件中进行比较,我使用了int.Parse,但当我尝试此代码时,出现了一个异常: if (int.Parse(minUpdown.Text.ToString()) < int.Parse(maxUpdown.Text.ToString())) { // do something } 我

我有两个IntegerUpDown控件,需要在
MouseLeave_事件
中进行比较,我使用了
int.Parse
,但当我尝试此代码时,出现了一个异常:

   if (int.Parse(minUpdown.Text.ToString()) < 
   int.Parse(maxUpdown.Text.ToString()))
                    {
                      // do something
                    }
我在Stackoverflow中搜索了一个解决方案来避免这个异常,我发现最好的解决方案是使用
int.TryParse
,但我不知道如何在返回布尔值的比较指令中使用它

应该应用的场景如下所示:

int.TryParse(minUpdown.Text?.ToString(), out var min);
int.TryParse(maxUpdown.Text?.ToString(), out var max);

if (min < max)
{
    // do something
}
  • 我已经有了一个
    IntegerUpdown\u MouseLeave\u事件
    ,我发布的代码在事件中被提及,因此
    IntegerUpdown
    控件可以是空的,也可以有值,因此如果用户试图输入字符(而不是数字)例如,
    IntegerUpDown
    中的
    a
    和这个
    IntegerUpDown
    有一个旧值,例如
    3
    ,因此当他将鼠标移到控件之外时,
    IntegerUpDown
    应该取3,而不是用户输入的字符,而不显示任何消息或异常

注意:出于某种原因,我不想在这种情况下使用minUpdown.Value,因为我在触发事件时获得的值是旧值,而不是实时值。

第一个问题“如何使用TryParse并比较值”的答案如下所示:

int.TryParse(minUpdown.Text?.ToString(), out var min);
int.TryParse(maxUpdown.Text?.ToString(), out var max);

if (min < max)
{
    // do something
}
int.TryParse(minUpdown.Text?.ToString(),out var min);
int.TryParse(maxUpdown.Text?.ToString(),out var max);
如果(最小值<最大值)
{
//做点什么
}
TryParse返回一个布尔值,告诉您是否成功执行了尝试

现在,如果希望视图用最后一个正确的值替换不正确的值,则需要将其保留在某个字段中,并根据需要进行更新,例如:

private int lastMinValue;
private int lastMaxValue;

private void IntegerUpdown_MouseLeave_Event(object source, EventArgs args)
{
    // use last value as a default for min and max
    int min = lastMinValue;
    int max = lastMaxValue;

    // try to update min and max
    if (int.TryParse(minUpdown.Text?.ToString(), out min))
    {
        lastMinValue = min;
    }
    if (int.TryParse(maxUpdown.Text?.ToString(), out max))
    {
        lastMaxValue = max;
    }

    if (min < max)
    {
        // do something
    }
}
private int lastMinValue;
私有int-lastMaxValue;
私有void IntegerUpdown\u MouseLeave\u事件(对象源,EventArgs args)
{
//使用最后一个值作为最小值和最大值的默认值
int min=最后的最小值;
int max=lastMaxValue;
//尝试更新最小值和最大值
if(int.TryParse(minUpdown.Text?.ToString(),out min))
{
lastMinValue=min;
}
if(int.TryParse(maxUpdown.Text?.ToString(),out max))
{
lastMaxValue=max;
}
如果(最小值<最大值)
{
//做点什么
}
}

所以您正在比较
resultmin
,但是如果其中一个无法解析呢?您想让比较返回true还是false,或者执行完全不同的操作?是的,我想比较
resultmin
resultmax
,如果失败,它应该返回默认值(以前的值)并删除用户输入的字符,这就是我需要的为什么不使用返回
int?
Value
属性?并且不需要重置事件处理程序中的上一个值。控件为您执行此操作,不是吗?谢谢,第一个有效,它已经是一个答案,并且已被删除(但对于空字符串,它仍然会给出相同的异常),对于第二个答案,无法获取
lastMinValue
,我将告诉您原因。因为用户可能会第一次输入值,然后更改另一个值,然后输入一个字符,所以在这种情况下,我只能得到第一个值,而不是前一个值,这对meI来说是个问题,我不知道。我假设您的
IntegerUpDown
是用特定值初始化的,例如“0”。然后用户手动键入“100”,然后键入“a”。当用户将鼠标移出控制时,“a”应替换为“100”。这里的问题在哪里?对于null值(注意空字符串和null值之间的差异),您需要使用null条件运算符(
字符),该运算符在前面返回
null
,以便在null对象上不调用链式方法。查看更新的答案。我将接受您的答案,但我发现此事件存在问题,因此我已将整个工作更改为确认按钮,
MouseLeave_事件
不好,因为它不实用,只有当鼠标位于
IntegerUpDown
控件内时才能工作,如果它在控件外呢??=>事件不会被触发,因此在这种情况下会给用户带来很大的问题。您还可以阅读有关
焦点丢失事件的信息,这通常是在许多UI技术中广泛用于确认输入值的事件。