Это вопрос о программе 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 и другие элементы управления.
Спасибо всем за ваши комментарии к этому вопросу.