如何使用 WPF 中的 TextChanged 从 km/h 转换为 m/s,没有很多小数
How to convert from km/h to m/s with TextChanged in WPF, without a lot of decimals
我想制作一个 m/s 到 km/h 的转换器,它可以双向工作,就像 google 一样。我在 WPF 中使用了 TextChanged,它有点管用。我的问题是,当我输入例如 7 时,程序会在同一字段中写入 6,9999999...。我怀疑是因为2个字段来回转换并找到最精确的数字。
我希望它每个字段只转换一次。因此,如果我在 km/h 字段中键入 7,它应该只转换为 m/s 然后停止。
Example of me typing in 7, but getting 6,9999999
我在程序中使用的2种方法:
private void ms_TextChanged(object sender, TextChangedEventArgs e)
{
if (ms.Text == "")
{
kmh.Text = "";
}
else
{
try
{
kmh.Text = (double.Parse(ms.Text) * 3.6).ToString();
kmh.CaretIndex = kmh.Text.Length;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
private void kmt_TextChanged(object sender, TextChangedEventArgs e)
{
if (kmh.Text == "")
{
ms.Text = "";
}
else
{
try
{
ms.Text = (double.Parse(kmh.Text) / 3.6).ToString();
ms.CaretIndex = ms.Text.Length;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
谢谢大家的回答。 @Sinatr 的 对我帮助很大!
我最终得到了这段代码。我在转换之前解耦了 Textchanged 事件,进行了转换,然后重新附加它。
private void ms_TextChanged(object sender, TextChangedEventArgs e)
{
if (ms.Text == "")
{
kmh.Text = "";
}
else
{
try
{
kmh.TextChanged -= kmh_TextChanged;
kmh.Text = (double.Parse(ms.Text) * 3.6).ToString();
kmh.TextChanged += kmh_TextChanged;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
private void kmt_TextChanged(object sender, TextChangedEventArgs e)
{
if (kmh.Text == "")
{
ms.Text = "";
}
else
{
try
{
ms.TextChanged -= ms_TextChanged;
ms.Text = (double.Parse(kmh.Text) / 3.6).ToString();
ms.TextChanged += ms_TextChanged;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
我想制作一个 m/s 到 km/h 的转换器,它可以双向工作,就像 google 一样。我在 WPF 中使用了 TextChanged,它有点管用。我的问题是,当我输入例如 7 时,程序会在同一字段中写入 6,9999999...。我怀疑是因为2个字段来回转换并找到最精确的数字。
我希望它每个字段只转换一次。因此,如果我在 km/h 字段中键入 7,它应该只转换为 m/s 然后停止。
Example of me typing in 7, but getting 6,9999999
我在程序中使用的2种方法:
private void ms_TextChanged(object sender, TextChangedEventArgs e)
{
if (ms.Text == "")
{
kmh.Text = "";
}
else
{
try
{
kmh.Text = (double.Parse(ms.Text) * 3.6).ToString();
kmh.CaretIndex = kmh.Text.Length;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
private void kmt_TextChanged(object sender, TextChangedEventArgs e)
{
if (kmh.Text == "")
{
ms.Text = "";
}
else
{
try
{
ms.Text = (double.Parse(kmh.Text) / 3.6).ToString();
ms.CaretIndex = ms.Text.Length;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
谢谢大家的回答。 @Sinatr 的
我最终得到了这段代码。我在转换之前解耦了 Textchanged 事件,进行了转换,然后重新附加它。
private void ms_TextChanged(object sender, TextChangedEventArgs e)
{
if (ms.Text == "")
{
kmh.Text = "";
}
else
{
try
{
kmh.TextChanged -= kmh_TextChanged;
kmh.Text = (double.Parse(ms.Text) * 3.6).ToString();
kmh.TextChanged += kmh_TextChanged;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}
private void kmt_TextChanged(object sender, TextChangedEventArgs e)
{
if (kmh.Text == "")
{
ms.Text = "";
}
else
{
try
{
ms.TextChanged -= ms_TextChanged;
ms.Text = (double.Parse(kmh.Text) / 3.6).ToString();
ms.TextChanged += ms_TextChanged;
}
catch (Exception)
{
MessageBox.Show("Input must be a valid number");
}
}
}