gpt4 book ai didi

c# - 防止文本框覆盖以前的数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:08 25 4
gpt4 key购买 nike

我有两个 if-else 条件,它们将在 Windows Forms 文本框中显示一些文本。此文本框从 UI 线程以外的其他线程设置了文本。

上下文:

 delegate void SetTextCallback(string text);

private void SetText(string text)
{
if (this.txtMessages.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.txtMessages.Text = text;
}
}

private void setTextFunc()
{
if(this condition is true)
{
setText("Hello from text 1" + Environment.NewLine);
}
else
{
setText("Hello from text 2" + Environment.NewLine);
}
}

现在的问题是,当显示 Hello from text 2 文本时,它会覆盖第一个文本。我希望它位于下方并保留第一个文本。我怎样才能做到这一点?

我考虑过这样使用列表集合:

List<string> listOfStrings = new List<string>();
listOfStrings.Add("Hello from text 1");
listOfStrings.Add("Hello from text 2");

然后遍历这个列表集合。这样行吗?

foreach(string x in listOfStrings)
{
MessageBox.Show(x);
}

有什么建议吗?我考虑过使用 RichTextBox,但鉴于我不会在运行时编辑文本,所以我认为没有必要。

最佳答案

你遇到的问题是:

this.txtMessages.Text = text;

在您的 setText 方法中,替换文本字段的 Text 属性的内容。如果您想添加到现有内容,您应该将代码替换为以下内容:

this.txtMessages.Text = this.txtMessages.Text + text;

正如您的代码所暗示的(由于在 setTextFunc 中添加了 Environment.NewLine)您总是希望用换行符分隔新添加的文本,请考虑按照以下行添加新功能:

private void AppendText(string text)
{
// Code to trigger the Invoke here
else
{
this.txtMessages.Text = this.txtMessages.Text + Environment.newLine + text;
}
}

这样做还允许您将“使用新行添加文本”的行为封装到一个方法中 - 目前您的 setTextFunc 方法有一个非常小重复代码的数量(添加 Environment.NewLine),您可以通过这样做来省略。

关于c# - 防止文本框覆盖以前的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45101973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com