Wpf TextChanged事件导致死循环,事件触发循环问题

1、实例:

说明:当TextBox控件的Text内容发生变化时,TextChanged事件触发,并且会立即同步执行。

基于这个特点,设置一个全局变量标识,ChangeTxtB,如果是正在修改txtB的时候,不执行txt_TextChanged事件内容。

这样就可以解决TextChanged事件带来的死循环问题。

//比特
private void txtb_TextChanged(object sender, TextChangedEventArgs e)
{
    if (ChangeTxtB) //如果当前是正在修改txtB,后面的代码不执行
        return;
    try
    {
        if (string.IsNullOrEmpty(txtb.Text))
        {
            txtb.Focus();
            return;
        }

        double number = double.Parse(txtb.Text);
        txtB.Text = (number / 8.0).ToString();
    }
    catch (Exception ex)
    {
        ShowError(ex.Message);
    }
}
//标识txtB对话框正在修改数据
private bool ChangeTxtB = false;
//字节
private void txtB_TextChanged_1(object sender, TextChangedEventArgs e)
{
label1.Content = "";
try
{
if (string.IsNullOrEmpty(txtB.Text))
{
    txtB.Focus();
    return;
}
//标识正在修改txtB
ChangeTxtB = true;
//吉字节变换是统一修改其他内容
double number = double.Parse(txtB.Text);
txtb.Text = (number * 8).ToString();//当修改Text属性时,txtb_TextChanged会立即同步触发
txtKB.Text = (number / 1024.0).ToString();
txtMB.Text = (number / 1024.0 / 1024.0).ToString();
txtGB.Text = (number / 1024.0 / 1024.0 / 1024.0).ToString();
txtTB.Text = (number / 1024.0 / 1024.0 / 1024.0 / 1024.0).ToString();
}
catch (Exception ex)
{
ShowError(ex.Message);
}
//标识结束修改txtB
ChangeTxtB = false;
}

 

posted @ 2016-08-14 17:16  天马3798  阅读(3888)  评论(2编辑  收藏  举报