我有一个Windows窗体应用程序(在C#中),带有2个组合框,1个numericUpDown框,1个文本框。用户必须在第一个组合框中选择一个输入,在第二个组合框中选择一个输入,然后在numericUpDown中选择一个值。然后,我的程序必须在文本框中显示结果。
我用了几个if语句来显示结果。
我知道c#从顶部到底部读取程序,这对我造成了问题。
当用户选择所有选项时,我的程序将显示正确的结果,但是,如果用户返回并更改其选项之一,则结果不正确(我认为由于c#已经过去,它无法正确更新if语句那部分代码?)
我将每个if语句放在相应的“ selectedIndexChanged”和“ ValueChanged”中(这是正确的方法吗?)
我应该使用if语句以外的其他东西吗?还是我应该使用“计算”按钮,在显示任何结果之前用户首先必须按下该按钮?
我可以使用退货或其他东西吗?我不太明白那些
我试图将其他布尔值设置为false,如果另一个布尔值设置为true,但这无济于事。
public bool staal = false; //steel
public bool rvs = false; //stainless
public string materiaal;
public void materiaalDropBox_SelectedIndexChanged(object sender, EventArgs e)
{
materiaal = materiaalDropBox.Text; //text currently in combobox
if (materiaal == "Staal")//material = steel
{
staal = true;
rvs = false;
}else if (materiaal == "RVS")
{
rvs = true; // material = stainless
staal = false;
}
}
public string soortboor; //kind of drill
public bool hss = false; //high speed steel drill
public bool hardmetaal = false; //cemented carbide drill
public bool spiraal = false; //basic drill
decimal VC = 0; // 318 * m/ms of drill on material
public void soortBoorDropBox_SelectedIndexChanged(object sender, EventArgs e)
{
soortboor = soortBoorDropBox.Text;// text currently in combobox
if (soortboor == "HSS")
{
hss = true; // drill is high speed steel
hardmetaal = false;
spiraal = false;
}else if (soortboor == "Hardmetaal")
{
hardmetaal = true;// drill is cemented carbide
hss = false;
spiraal = false;
}else if (soortboor == "Spiraal")
{
spiraal = true; // drill is normal
hss = false;
hardmetaal = false;
}
// if material && metal match a certain type, set VC value
if (rvs && hardmetaal)
{
VC = Convert.ToDecimal(318 * 30);
}else if (staal && hardmetaal)
{
VC = Convert.ToDecimal(318 * 60);
}else if (staal && hss)
{
VC = Convert.ToDecimal(318 * 40);
}else if (staal && spiraal)
{
VC = Convert.ToDecimal(318 * 15);
}else
{
VC = 0;
}
}
public decimal diameter; //drill diameter
string RPM; //required RPM ( this is the output we want to calculate)
public void diameterValue_ValueChanged(object sender, EventArgs e)
{
diameter = diameterValue.Value; //get diameter value from numericUpDown
RPM = Convert.ToString(VC / diameter);//convert VC divided by diamter value to string
toerentalValue.Text = RPM; // show RPM value as string in a textbox
}
我认为将所有更新代码都放在每个selectedIndex_Changed
事件中是不合适的。将您的代码更改为这样
public void materiaalDropBox_SelectedIndexChanged(object sender, EventArgs e)
{
//Set your property values
UpdateCalculation();
}
private void UpdateCalculation()
{
//Holds all the other code for calculations
}
因此,每次SelectedIndex
更改时,您只需将的值设置comboBox
为私有字段,然后调用UpdateCalculations
做剩余的工作即可。UpdateCalculations
然后获取这些值并对其进行处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句