[英]how to append text to lines of texbox?
我在_TextChanged
使用以下代碼:
string[] currentLines = new string[text.Lines.Length];
for (int i = 0; i < currentLines.Length; i++) {
currentLines[i] = text.Lines[i] + "...";
}
text.Lines = currentLines;
調用事件時崩潰。 我不知道如何解決此問題,當我這樣做時會發生崩潰:
text.Lines = currentLines;
為什么這樣以及如何解決? 提前致謝。
設置行可能會再次觸發_TextChanged
事件。 您遇到什么錯誤? 如果看到StackOverflowException,則是原因。
您可以添加它來解決問題,或者采用丹尼爾在回答中提到的布爾標志方法。
text.TextChanged -= textBox1_TextChanged;
text.Lines = currentLines;
text.TextChanged += textBox1_TextChanged;
此外,您可能會很感興趣這個討論程序化更改和用戶驅動的更改之間差異的問題 。
正如Adam S在回答中指出的那樣,由於無休止的遞歸,您很可能會收到StackOverflowException
。 您可以嘗試像這樣修復它:
private void _TextChanged(...)
{
static bool settingLines = false;
if(settingLines)
return;
string[] currentLines = new string[text.Lines.Length];
for (int i = 0; i < currentLines.Length; i++) {
currentLines[i] = text.Lines[i] + "...";
}
settingLines = true;
text.Lines = currentLines;
settingLines = false;
}
此解決方案不是線程安全的,但是對於您而言,這仍然不是問題,因為無論如何您都與UI控件進行交互。
也許嘗試在有問題的行之前取消訂閱_TextChanged
事件,然后在該行之后重新訂閱。
解決方案:
由於我不知道的原因(如果您知道,請為我解釋),此崩潰僅發生在TextBox
,我將其替換為RichTextBox
,現在可以正常使用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.