2013-04-02 1 views
0

Когда я печатаю в первом текстовом поле, он должен запустить преобразование, которое появляется во втором, а когда я печатаю во втором, оно появится в первом. Однако, когда я ввожу первое событие с измененным текстом, он запускает второй, который прерывает ввод в первом и наоборот. Есть ли способ, с помощью которого можно отключить событие textchanged, когда оно выделено или что-то еще?Два синхронных события Textchanged Events в Winforms C#

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(); 
      } 
    } 
+0

пойти на какой-то флаг или иметь какое-то событие, как Keypressed/keyentered, потому что textchange не работает здесь, я думаю, потому что testchange будет продолжать выполнение всякий раз, когда текст изменяется в любом случае –

ответ

0

вы можете удалить обработчик другого текстового поля, а затем добавить его

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; 


} 
0

Вы можете просто использовать 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; 
} 
Смежные вопросы