gpt4 book ai didi

c# - 如何通过不同的类将文本发送到文本框?

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

我正在使用 C# 开发 Windows 窗体应用程序项目。有一个名为 MainForm 的图形主窗体,带有一个文本框,其工作方式类似于日志查看器。此外,还有许多类必须通过文本框发送有关其工作的信息。

我已经在 Program.cs 中有了这段代码。它创建一个公共(public)成员

  public static MainForm mainForm;

public static Main()
{
...
mainForm = new MainForm();
Application.Run(mainForm);

// Application.Run(new MainForm()); I commented this default line
}

在 MainForm.cs 内部我有这个:

public void sendMessage(string message)
{
// puts message in textbox...
}

最后,我可以通过这种方式从另一个类访问:

class otherClass
{
...

private void someFunction(){
...


Program.mainForm.sendMessage("send to log!");

}
}

我怎样才能改变这种行为?它是否存在另一种更有效的方式?

最佳答案

有很多更好的方法可以完成您想要做的事情。这取决于您的应用程序的结构。

您可能想创建一个类来进行日志记录。在此类中,您将创建一个事件,该事件在更改/添加日志时触发。然后你的应用程序中的任何模块都可以调用这个日志记录类,任何你想要监视日志记录的 UI 元素都可以像这样订阅事件:

public static class MyLogger
{
private static List<string> log = new List<string>();

public static event EventHandler LogAdded;

public static void Log(string message)
{
log.Add(message);

if (LogAdded != null)
LogAdded(null, EventArgs.Empty);
}

public static string GetLastLog()
{
if (log.Count > 0)
return log[log.Count - 1];
else
return null;
}
}

然后您可以使用此行从任何地方添加到日志:

MyLogger.Log("message");

您的任何表单都可以像这样订阅所有日志事件:

MyLogger.LogAdded += new EventHandler(MyLogger_LogAdded);

请记住在关闭/处理表单时像下面这样删除事件:

MyLogger.LogAdded -= new EventHandler(MyLogger_LogAdded);

你会像这样回应这个事件:

void MyLogger_LogAdded(object sender, EventArgs e)
{
textBox.Text = textBox.Text + Environment.NewLine + MyLogger.GetLastLog();
}

您可以轻松创建自己的类来表示包含您希望存储/组织/显示的任何数据的日志条目,而不是记录字符串。

关于c# - 如何通过不同的类将文本发送到文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8622937/

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