簡體   English   中英

一旦我打開應用程序就會觸發 TextChanged 事件

[英]TextChanged event firing as soon as I open the app

所以我正在用 C# 制作一個應用程序,它可以在其中創建/編輯現有的 .ini 文件。 我嘗試添加的功能之一是,如果我通過我創建的 c# 應用程序更改 .ini 文件,並且嘗試關閉應用程序、打開另一個 .ini 文件或創建一個新文件,它應該提示用戶,如果他們想保存文件。 為了實現這一點,我有一個名為dataChanged的標志。 在多個文本框的 TextChanged 事件中,我設置了dataChanged = true; 因為對文件進行了更改。 但是,出於某種原因,一旦我打開應用程序,所有 TextChange 事件都會觸發,因此即使我沒有在各種文本框中輸入任何值,當我關閉應用程序時,它也會提示我保存文件(它應該'不是!)。 應用 AUI 的一部分

應用程序界面:

用戶在文本框中輸入文本。

關於 4 個文本框的部分代碼:

 private void TextBox_TextChanged(object sender, TextChangedEventArgs e) //ifrs installer
        {

            dataChanged = true;

        }

        private void TextBox_TextChanged_1(object sender, TextChangedEventArgs e) //ifrs patchfile
        {

            dataChanged = true;
        }


        private void textBox3_TextChanged(object sender, TextChangedEventArgs e) 
        {

            dataChanged = true;
        }

        private void textBox4_TextChanged(object sender, TextChangedEventArgs e) 
        {

            dataChanged = true;
        }

即使您設置了一些文本,TextChanged 事件也會觸發。 顯然,您在加載應用程序時設置了一些初始文本。

設置初始值后,您可以手動訂閱該事件。

textBox4.TextChanged += textBox4_TextChanged;

或在設置值之前取消訂閱並在此之后訂閱。

textBox4.TextChanged -= textBox4_TextChanged;

textBox4.Text = "Initial Value";

textBox4.TextChanged += textBox4_TextChanged;

在我看來,您正在以編程方式設置 textBoxN.Text 屬性。

您可能想要做的是在dataChanged = true;周圍添加一個if (appInitialized) dataChanged = true; 並且僅在應用程序加載后將appInitialized設置為 true,也許在您的Form_Load事件中。 這樣,初始加載不會設置您的變量。 另一種選擇是僅在您已經設置初始值后注冊TextChanged事件。 我的猜測是您使用設計器注冊了事件,因此由於設計器添加事件注冊的位置,它會針對這些初始設置觸發。 而是做

textBox4.TextChanged += textBox4_TextChanged;
// Etc. for each text box

設置 .Text 屬性后。 同樣,也許在您的Form_Load

我猜你是在程序加載時加載 ini 文件,這會觸發文本更改事件。 我建議做這樣的事情。

    private void Form1_Load(object sender, EventArgs e)
    {
        LoadData();
    }
    private bool _LoadingData = false;
    private bool _DataChanged = false;
    private void LoadData()
    {
        try
        {
            _LoadingData = true;
            // Load data
        }
        finally
        {
            _LoadingData = false;
        }
    }
    public void DataChanged()
    {
        if (_LoadingData == false)
        {
            _DataChanged = true;
        }
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        DataChanged();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM