C# 在windows窗体应用程序中,当用户在先前设置值后更改值时,我是否可以更新if语句结果?

C# 在windows窗体应用程序中,当用户在先前设置值后更改值时,我是否可以更新if语句结果?,c#,C#,我有一个windows窗体应用程序(c#) 有2个组合框,1个数字上下框,1个文本框。 用户必须在第一个组合框、第二个组合框中选择一个输入,然后在numericUpDown中选择一个值。 然后,我的程序必须在文本框中显示结果 我使用了几个if语句来显示结果 我知道c#从上到下读取程序 这给我带来了一个问题 当用户选择所有选项时,我的程序将显示正确的结果,但如果用户返回并更改其中一个选项,则结果不正确(我认为它无法正确更新if语句,因为c#已经超过了代码的该部分?) 我将每个if语句放在相应的“s

我有一个windows窗体应用程序(c#) 有2个组合框,1个数字上下框,1个文本框。 用户必须在第一个组合框、第二个组合框中选择一个输入,然后在numericUpDown中选择一个值。 然后,我的程序必须在文本框中显示结果

我使用了几个if语句来显示结果

我知道c#从上到下读取程序 这给我带来了一个问题

当用户选择所有选项时,我的程序将显示正确的结果,但如果用户返回并更改其中一个选项,则结果不正确(我认为它无法正确更新if语句,因为c#已经超过了代码的该部分?)

我将每个if语句放在相应的“selectedIndexChanged”和“ValueChanged”中(这是正确的方法吗?)

我应该使用if语句以外的其他语句吗? 或者我应该使用“计算”按钮,用户在显示任何结果之前必须先按下该按钮

我能用退货什么的吗?我真的不明白这些

如果另一个布尔值设置为真,我尝试将其他布尔值设置为假,但这没有任何作用

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\u Changed
事件中是不合适的。把你的代码改成这样

public void materiaalDropBox_SelectedIndexChanged(object sender, EventArgs e)
{
   //Set your property values
   UpdateCalculation();
}

private void UpdateCalculation()
{
   //Holds all the other code for calculations
}

因此,每次
选择的索引
发生更改时,您只需将
组合框的值设置为一个专用字段,然后调用
更新计算
来完成剩余的工作
UpdateCalculations
然后获取这些值并处理它们。

您需要显示当前代码。我们无法猜出你犯的错误并提出任何解决方案。@ChetanRanpariya我现在添加了它,很抱歉,你的意思是,对于每一个交换的索引和更改的值,我都会单独创建一个私有无效?或者所有这些加在一起,我做了一个私有的void?nvm,我把所有的计算放在了一个updatecalculation中,现在可以了,我将不得不清理ifstatements,因为它现在很混乱,但是,非常感谢你