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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM