Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# 事件编号Updown_背景色已更改';t触发器_C#_.net_Winforms_Numericupdown_Backcolor - Fatal编程技术网

C# 事件编号Updown_背景色已更改';t触发器

C# 事件编号Updown_背景色已更改';t触发器,c#,.net,winforms,numericupdown,backcolor,C#,.net,Winforms,Numericupdown,Backcolor,我想编写一个应用程序,用户可以在NumericUpDown控件中输入数字。在运行时确定的数字(例如范围)有一些条件。为了给用户提供反馈,当至少一个条件不满足时,我将NumericUpDown的背景色更改为红色。到目前为止,它像我期望的那样工作 现在我想给NumericUpDown添加一个工具提示,解释为什么数字是“错的”。当我使用事件NumericUpDown\u BackColorChanged来调整文本时,事件不会“触发”。为什么呢 我想这与前面提到的数字向上向下的复合字符有关。但我不确定。

我想编写一个应用程序,用户可以在NumericUpDown控件中输入数字。在运行时确定的数字(例如范围)有一些条件。为了给用户提供反馈,当至少一个条件不满足时,我将NumericUpDown的背景色更改为红色。到目前为止,它像我期望的那样工作

现在我想给NumericUpDown添加一个工具提示,解释为什么数字是“错的”。当我使用事件NumericUpDown\u BackColorChanged来调整文本时,事件不会“触发”。为什么呢

我想这与前面提到的数字向上向下的复合字符有关。但我不确定。我需要你的帮助

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        if (numericUpDown1.Value == 42)
        {
            numericUpDown1.BackColor = Color.Red;
        }
        else
        {
            numericUpDown1.BackColor = System.Drawing.SystemColors.Window;
        }
    }

private void numericUpDown1_BackColorChanged(object sender, EventArgs e)
    {
        //something epic should happen
        //but somehow my program never reaches these lines :(
    }

建议:您可以通过从工具箱中拖放来在工具箱中添加一个

按如下方式替换代码:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    { 
        errorProvider1.Clear();

        if (numericUpDown1.Value == 42)
        {
            numericUpDown1.BackColor = Color.Red;
            errorProvider1.SetError(numericUpDown1, "Select another number");
        }
        else
        {
            numericUpDown1.BackColor = System.Drawing.SystemColors.Window;
        }
    }

建议:您可以通过从工具箱中拖放来在工具箱中添加一个

按如下方式替换代码:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    { 
        errorProvider1.Clear();

        if (numericUpDown1.Value == 42)
        {
            numericUpDown1.BackColor = Color.Red;
            errorProvider1.SetError(numericUpDown1, "Select another number");
        }
        else
        {
            numericUpDown1.BackColor = System.Drawing.SystemColors.Window;
        }
    }

我已经确认
NumericUpDown.BackColor
属性设置程序确实没有调用
OnBackColorChanged
(至少在.NET 4.0中)

我假设发生这种情况是因为
UpDownBase
中的
BackColor
属性已被重写,以同时设置
NumericUpDown
中合成控件的
BackColor
,并且可能有人忘记调用基本实现(我很想听听这里一些WinForms专家的意见)

您可以创建一个
FixedNumericUpDown
控件,该控件继承自
NumericUpDown
,并重写
BackColor
属性,如下所示:

public Color BackColor
{
    override set
    {
        base.BackColor = value;
        OnBackColorChanged(EventArgs.Empty);
    }
}

我已经确认
NumericUpDown.BackColor
属性设置程序确实没有调用
OnBackColorChanged
(至少在.NET 4.0中)

我假设发生这种情况是因为
UpDownBase
中的
BackColor
属性已被重写,以同时设置
NumericUpDown
中合成控件的
BackColor
,并且可能有人忘记调用基本实现(我很想听听这里一些WinForms专家的意见)

您可以创建一个
FixedNumericUpDown
控件,该控件继承自
NumericUpDown
,并重写
BackColor
属性,如下所示:

public Color BackColor
{
    override set
    {
        base.BackColor = value;
        OnBackColorChanged(EventArgs.Empty);
    }
}


您是否设置了断点以确保代码进入第一个事件而不进入第二个事件?还是通过观察结果得出结论?是的,我设置了一个断点!颜色变红了。未达到断点。我无意冒犯,我只是想确认一下,因为我看不出事件不会被触发的原因,不管它是复合控件。请检查NumericUpDown控件的属性窗口。将事件的Enter属性设置为numericUpDown1_ValueChanged..@Rotem不接受任何冒犯。是否设置了断点以确保代码输入第一个事件而不输入第二个事件?还是通过观察结果得出结论?是的,我设置了一个断点!颜色变红了。未达到断点。我无意冒犯,我只是想确认一下,因为我看不出事件不会被触发的原因,不管它是复合控件。请检查NumericUpDown控件的属性窗口。将事件的输入属性设置为numericUpDown1_ValueChanged..@Rotem no offence take.ty作为输入。我会考虑这个问题。但问题是,有一些外部事件会改变数字的条件(也就是说,这不是程序中唯一改变红色的部分)。现在,我正在寻找一个简单的解决方案,可以捕获我用红色改变颜色的每个实例;您还可以编写errorProvider1.SetError(numericUpDown1,“选择另一个数字”)@Arshad虽然你的解决方案有效,但这是一个变通办法,而不是解决方案。这里有趣的问题是为什么事件没有触发,而不是在这个特殊情况下可以做什么来显示错误。@Arshad显然我可以这样做。关键是我已经写了那个部分,我不想再重复一遍,只是为了把一行重复几次(干!)。输入。我会考虑这个问题。但问题是,有一些外部事件会改变数字的条件(也就是说,这不是程序中唯一改变红色的部分)。现在,我正在寻找一个简单的解决方案,可以捕获我用红色改变颜色的每个实例;您还可以编写errorProvider1.SetError(numericUpDown1,“选择另一个数字”)@Arshad虽然你的解决方案有效,但这是一个变通办法,而不是解决方案。这里有趣的问题是为什么事件没有触发,而不是在这个特殊情况下可以做什么来显示错误。@Arshad显然我可以这样做。关键是我已经写了那个部分,我不想再重复一遍,只是为了把一行重复几次(干巴巴的!)。泰。那么基本上它是.NET框架中的一个bug?如果是这样的话,我可以写一个bug报告。我不想成为那个叫bug的男孩,但这看起来确实像是这样。bug报告:我很想听听他们对此有什么看法。bug报告的状态更改了,请执行“已解决”。分辨率设置为“无法修复”!我想Windows窗体已经到了生命的尽头。那么基本上它是.NET框架中的一个bug?如果是这样的话,我可以写一个bug报告。我不想成为那个叫bug的男孩,但这看起来确实像是这样。bug报告:我很想听听他们对此有什么看法。bug报告的状态更改了,请执行“已解决”。分辨率设置为“无法修复”!我想Windows窗体已经过时了。