我目前的代码应用程序最终应该是针对ProEvolutionSoccer统计转换器的足球经理,但是,现在,问题是我在C#中是一个安静的新人,并且我有超过60个numericUpDowns。
每个上升流都应该在某些污道处改变颜色,例如,在值13时,后颜色需要变为绿色,在15变为黄色,等等。
以下是我在valueChange事件中所做的一个例子:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
decimal corners = numericUpDown1.Value;
if (corners < 13)
{
numericUpDown1.BackColor = Color.White;
}
else if(corners >= 13 && corners < 15)
{
numericUpDown1.BackColor = Color.LightGreen;
}
else if (corners >= 15 && corners < 17)
{
numericUpDown1.BackColor = Color.Yellow;
}
else if (corners >= 17 && corners < 19)
{
numericUpDown1.BackColor = Color.Orange;
}
else
{
numericUpDown1.BackColor = Color.Red;
}
}
问题不仅仅是显而易见的,因为我真的不想写这个块超过60次并只更改更新的索引或订单号。
是否存在任何类型的自我引用,例如在php中使用self关键字,或者这个或父级, CLASS 等等......
或者某种循环会是更好的选择吗?
答案 0 :(得分:3)
您可以为每个控件使用相同的事件处理程序。只需使用sender
参数代替numericUpDown1
:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
var numericUpDown = (NumericUpDown)sender;
decimal corners = numericUpDown.Value;
if (corners < 13)
{
numericUpDown.BackColor = Color.White;
}
...
然后,在订阅控件时,您可以使用相同的处理程序。
例如,对于Asp.Net:
<asp:NumericUpDown id="numericUpDown1" OnValueChanged="numericUpDown_ValueChanged" />
<asp:NumericUpDown id="numericUpDown2" OnValueChanged="numericUpDown_ValueChanged" />
<asp:NumericUpDown id="numericUpDown3" OnValueChanged="numericUpDown_ValueChanged" />
例如,对于Winforms:
numericUpDown1.ValueChanged += numericUpDown_ValueChanged;
numericUpDown2.ValueChanged += numericUpDown_ValueChanged;
numericUpDown3.ValueChanged += numericUpDown_ValueChanged;
答案 1 :(得分:2)
您可以让每个控件引用相同的ValueChanged
方法,然后sender
将是NumericUpDown触发事件的位置。
答案 2 :(得分:0)
为什么不在像这样的类中创建静态函数/方法?
Public class Tools {
public static Color getColorFromDecimal(decimal corners){
if (corners < 13)
{
return Color.White;
}
else if(corners >= 13 && corners < 15)
{
return Color.LightGreen;
}
else if (corners >= 15 && corners < 17)
{
return Color.Yellow;
}
else if (corners >= 17 && corners < 19)
{
return Color.Orange;
}
else
{
return Color.Red;
}
}
}
然后就这样称呼它
decimal corners = numericUpDown1.Value;
numericUpDown.BackColor = getColorFromDecimal(corners);