从c#的不同类中输入listBox
本文关键字:输入 listBox 同类 | 更新日期: 2023-09-27 18:15:14
这里有一些初学者在谷歌上搜索了2个小时后的问题。
我有一个WindowsForm命名GUI与一个列表框项目(它不一定是一个列表框)
我想要实现的是在GUI中有一个框,并从我的项目文本中的每个类发送到该框。
的例子:在program .cs中,我想简单地写一些像这样的GUI。WriteToLog("Hello World");它应该出现在那个框里。
这个GUI。WriteToLog应该在每个类中工作。
我试图在GUI类中编写一个静态函数WriteToLog,但如果它是静态的,我不能在该函数中使用listBox1。
public partial class GUI : Form
{
public void WriteToLog(string msg)
{
listBox1.Items.Add(msg);
}
}
这里是应该访问box的类:
class FileManager
{
internal static void RenameFiles(string filePath)
{
GUI g = new GUI();
g.WriteToLog("Moving Files");
try {
File.Move(filePath, filePath + ".RDY");
}
catch (Exception e)
{
string message = e.ToString();
string caption = "Error";
MessageBox.Show(message, caption);
}
}
编辑:我想做的更多细节:我必须从我所有的类访问ListBox,因为它应该通知状态。在谷歌搜索了更多之后。我发现最好的方法是写一个事件。对吧?我该怎么做呢?我想要的例子:带有列表框的GUI…我在类"FileManager" Function "RenameFile"中我想在ListBox中写一行"嘿,我现在正在重命名文件"或者我在类"Communicator" Function "SendEmail"中我想在ListBox中添加一行"嘿,老兄,我正在发送一封很棒的邮件"
当您调用方法RenameFiles
时,您创建了一个名为GUI的类的新实例。所以你没有使用相同的形式。
您可以在创建GUI类时使用依赖注入来修复代码,以便FileManager
无需创建新类就可以访问。通过在FileManager
中添加类似的内容,并在创建GUI时调用setter。
private GUI gui;
public void SetGUI(GUI g)
{
this.gui = g;
}
一个解决方案是在下面的例子中使用单例模式:
public partial class GUI
{
private static GUI _instance;
public static GUI Instance
{
get { return _instance ?? (_instance = new GUI()); }
}
public void WriteToLog(string msg)
{
//[your code]...
}
}
class FileManager
{
internal static void RenameFiles(string filePath)
{
GUI.Instance.WriteToLog("Moving Files");
// [other code]...
}
}