从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中添加一行"嘿,老兄,我正在发送一封很棒的邮件"

从c#的不同类中输入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]...
    }
}