在Winforms c#中同时触发两个Textchanged Events

本文关键字:两个 Events Textchanged Winforms | 更新日期: 2023-09-27 18:06:51

当我输入第一个文本框时,它应该运行在第二个文本框中出现的转换,当我输入第二个文本框时,它将出现在第一个文本框中。但是,当我输入第一个textchanged事件时,它会触发第二个textchanged事件,这会干扰第一个textchanged事件的输入,反之亦然。是否有一种方法,我可以禁用触发textchanged事件时,它是突出显示或什么?

public void dB10_TextChanged(object sender, EventArgs e)
    {
        TextBox dB10 = sender as TextBox;
        double dBV;
        int i = dB10.Text.Trim().Length;
        if (i > 0)
        {
            dBV = Convert.ToDouble(dB10.Text);
        }
        else
            return;
       UnitConverter dBConverter = new UnitConverter();
       // Controls for if various radiobuttons were clicked
        if (dBVRadio.Checked == true)
        {
            dBV = dBConverter.dBVToVolts(dBV);
            voltage.Text = dBV.ToString(); 
         }
        else if (dBuRadio.Checked == true)
        {
            dBV = dBConverter.dBuToVolts(dBV);
            voltage.Text = dBV.ToString();
        } 
    }
   public void voltage_TextChanged(object sender, EventArgs e)
    {
        TextBox voltage = sender as TextBox; //V >> dB10 (dBV/dBu)
        int i = voltage.Text.Trim().Length;
        double volts;
        if (i > 0)
        {
            volts = Convert.ToDouble(voltage.Text);
        }
        else
            return;
        UnitConverter dBConverter = new UnitConverter();
            if (dBVRadio.Checked == true)
            {
                dBuRadio.Checked = false;
                volts = dBConverter.voltsTodBV(volts);
                dB10.Text = volts.ToString(); 
            }
            else if (dBuRadio.Checked == true)
            {
                volts = dBConverter.voltsTodBu(volts);
                dB10.Text = volts.ToString();
            }
    }

在Winforms c#中同时触发两个Textchanged Events

您可以删除另一个文本框的处理程序,然后添加它

public void dB10_TextChanged(object sender, EventArgs e)
{
    voltage.TextChanged-= voltage_TextChanged;
    TextBox dB10 = sender as TextBox;
    double dBV;
    int i = dB10.Text.Trim().Length;
    if (i > 0)
    {
        dBV = Convert.ToDouble(dB10.Text);
    }
    else
        return;
   UnitConverter dBConverter = new UnitConverter();
   // Controls for if various radiobuttons were clicked
    if (dBVRadio.Checked == true)
    {
        dBV = dBConverter.dBVToVolts(dBV);
     }
    else if (dBuRadio.Checked == true)
    {
        dBV = dBConverter.dBuToVolts(dBV);
    } 
   voltage.Text = dBV.ToString();
   voltage.TextChanged+= voltage_TextChanged;

}

您可以直接使用bool变量:

bool escape = false;
public void dB10_TextChanged(object sender, EventArgs e)
{
    if(escape)
        return;
    escape = true;
    // your code
    escape = false;
}
public void voltage_TextChanged(object sender, EventArgs e)
{
    if(escape)
        return;
    escape = true;
    // your code
    escape = false;
}