打开应用程序时,TextChanged事件会立即触发

时间:2015-07-29 13:21:21

标签: c#

所以我在C#中创建一个应用程序,用于创建/编辑现有的.ini文件。我想添加的一个功能是,如果我通过我创建的c#app更改.ini文件,并尝试关闭应用程序,打开另一个.ini文件或创建一个新文件,它应该提示用户是否要保存文件。为此,我有一个名为 dataChanged 的标志。在多个文本框的TextChanged事件中,我设置了dataChanged = true;,因为对文件进行了更改。但是,出于某种原因,只要我打开应用程序,所有TextChange事件都会启动,所以即使我没有在各种文本框中输入任何值,当我关闭应用程序时,它会提示我保存文件(它不应该“T!)。 Part of App AUI

App UI:

用户在文本框中输入文字。

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

3 个答案:

答案 0 :(得分:0)

即使您设置了一些文本,TextChanged事件也会触发。显然你在加载应用程序时设置了一些初始文本。

您可以在设置初始值后手动订阅该事件。

textBox4.TextChanged += textBox4_TextChanged;

或在您设置值之前取消订阅并在此之后订阅。

textBox4.TextChanged -= textBox4_TextChanged;

textBox4.Text = "Initial Value";

textBox4.TextChanged += textBox4_TextChanged;

答案 1 :(得分:0)

听起来像我一样以编程方式设置textBoxN.Text属性。

您可能想要做的是在if (appInitialized)周围添加dataChanged = true;,并在加载应用后将appInitialized设置为true,可能是在Form_Load事件中。这样,初始加载不会设置您的变量。另一种选择是在您已经设置初始值后仅注册TextChanged事件。我的猜测是你使用设计师注册了这个事件,因此它因为设计师添加事件注册的位置而触发那些初始设置。而是做

textBox4.TextChanged += textBox4_TextChanged;
// Etc. for each text box
在设置.Text属性后

自己。同样,也许在你的Form_Load

答案 2 :(得分:0)

我猜你在加载程序时加载了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();
    }