Почему изменение текста в событии TextChanged элемента управления RichTextBox не вызывает переполнение стека? - PullRequest
0 голосов
/ 30 ноября 2018

Это вопрос о программе Winform C #.

Недавно я нашел следующий код, когда посмотрел свой старый код:

        richTextBox1.TextChanged +=
            (x, y) =>
            {
                string indentation = "\t\t";
                string output = "";
                foreach (string str in richTextBox1.Lines)
                    output += indentation + str+"\r\n";
                this.Invoke(new Action(() => richTextBox1.Text = output.TrimEnd('\r','\n')));
            };

Я думаю, что этот код будетвызвать переполнение стека, поэтому я запустил его, но он работал нормально. Итак, я написал следующий тестовый код:

        button1.TextChanged +=
            (x, y) =>
            {
                button1.Text += "Nay";
                this.Invoke(new Action(() => button1.Text += "Neko"));
            };
        richTextBox1.TextChanged +=
            (x, y) =>
            {
                richTextBox1.Text += "Nay";
                this.Invoke(new Action(() => richTextBox1.Text += "Neko"));
            };
        this.Load +=
            (x, y) =>
            {
                richTextBox1.Text = "Test";
                button1.Text = "Test";
            };

ps: эти коды находятся в конструкторе Form программы WinForm.

У меня такой вопрос: Вообще говоря, в событии TextChanged элемента управления C изменение свойства Text элемента управления C приведет к переполнению стека, а элемент управления RichTextBox - нет.Даже если вы измените его свойство Text в событии TextChanged элемента управления RichTextBox, TextChanged не сработает.Мне любопытно, почему это происходит?

Элементы управления, которые я тестировал: элемент управления формы / элемент управления Label / элемент управления ListBox / элемент управления ComboBox / элемент управления Button / элемент управления CheckBox / элемент управления GroupoBox / элемент управления DataGridView и другие элементы управления.

Спасибо всем за ваши комментарии к этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...