如何使两个文本框都可以正常工作?

时间:2019-09-24 08:41:12

标签: c# .net winforms

我正在用Winforms创建一个简单的单位转换器,这意味着我需要两个Textboxes,在textbox1中输入'from'值,然后在{{ 1}}打印出转换后的值。我也想使它更其他方式工作,即从textbox2获取输入并在textbox2中打印出转换后的值。我应该怎么做?

2 个答案:

答案 0 :(得分:5)

您必须为两个{em> TextChanged es实现TextBox事件处理程序;唯一的困难是了解哪个控件(textBox1textBox2) 已由用户更改(为了防止无限循环(当textBox1的值转换为textBox2时又反过来转换为textBox1 s等)。您可以选中Focused

private void textBox1_TextChanged(object sender, EventArgs e) {
  // Do nothing, if user is changing some other control (e.g. textBox2)
  if (!(sender as Control).Focused)
    return;

  // Having textBox1.Text value convert it forward to textBox2.Text
  textBox2.Text = Convert(textBox1.Text); 
}

private void textBox2_TextChanged(object sender, EventArgs e) {
  // Do nothing, if user is changing some other control (e.g. textBox1)
  if (!(sender as Control).Focused)
    return;

  // Having textBox2.Text value convert it backward to textBox1.Text
  textBox1.Text = ReverseConvert(textBox2.Text); 
}

或使用事件处理程序(尤其是 flexible 尤其如此,如果您可以通过单击按钮开始转换,那么textBox1或{ textBox2有重点):

private void textBox1_TextChanged(object sender, EventArgs e) {
  textBox2.TextChange -= textBox2_TextChanged;

  try {
    // Since textBox2.TextChanged switched off,
    // changing textBox2.Text will not cause textBox1.Text change
    textBox2.Text = Convert(textBox1.Text); 
  }
  finally {
    textBox2.TextChange += textBox2_TextChanged;
  }
}

private void textBox2_TextChanged(object sender, EventArgs e) {
  textBox1.TextChange -= textBox1_TextChanged;

  try {
    // Since textBox1.TextChanged switched off,
    // changing textBox1.Text will not cause textBox2.Text change
    textBox1.Text = ReverseConvert(textBox2.Text); 
  }
  finally {
    textBox1.TextChange += textBox1_TextChanged;
  }
}

答案 1 :(得分:0)

您可以在一个事件处理程序中处理两个文本框的文本更改事件(它将触发两次事件)

private void textBox_TextChanged(object sender, EventArgs e)
{
    if (((TextBox)sender).Equals(textBox1)) 
        textBox2.Text = Convert((TextBox)sender).Text);
    else
        textBox1.Text = ReverseConvert((TextBox)sender).Text);
}