繁体   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