我正在用Winforms创建一个简单的单位转换器,这意味着我需要两个Textboxes
,在textbox1
中输入'from'值,然后在{{ 1}}打印出转换后的值。我也想使它更其他方式工作,即从textbox2
获取输入并在textbox2
中打印出转换后的值。我应该怎么做?
答案 0 :(得分:5)
您必须为两个{em> TextChanged
es实现TextBox
事件处理程序;唯一的困难是了解哪个控件(textBox1
或textBox2
)
已由用户更改(为了防止无限循环(当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);
}