来自不同类的Feed listBox c#

时间:2015-09-29 06:34:16

标签: c# listbox

这里有一些初学者在谷歌搜索2小时后提问。

我有一个带有列表框项目的WindowsForm GUI(不一定是列表框)

我想要实现的是在GUI中有一个框,从项目文本中的每个类发送到该框。

实施例: 在Programm.cs中,我想简单地写一下这样的GUI.WriteToLog(“Hello World”); 它应该出现在那个方框中。

这个GUI.WriteToLog应该适用于每个类。

我试图在GUI类中编写一个静态函数WriteToLog,但如果它的静态我不能在该函数中使用listBox1。

    public partial class GUI : Form
{
        public void WriteToLog(string msg)
    {


        listBox1.Items.Add(msg);

    }
}

这里应该访问该框的类:

    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,因为它应该告知状态。经过一些谷歌搜索后。我发现最好的方法是写一个事件?我这样对吗?我是怎么做到的?我想要的示例:带有ListBox的GUI ...我在类“FileManager”函数“RenameFile”中我想写一行到ListBox“嘿,我现在正在重命名文件”或者我在Class中“ Communicator“在函数中”SendEmail“所以我想在ListBox中添加一行”嘿伙计,我发送了一封愚蠢的电子邮件“......

2 个答案:

答案 0 :(得分:0)

当您调用方法RenameFiles时,您将创建一个名为GUI的类的新实例。所以你没有使用相同的表格 您可以在创建GUI类时使用依赖注入来修复代码,以便FileManager可以访问而无需创建新类。 通过向FileManager添加类似的内容并在创建GUI时调用setter。

private GUI gui;
public void SetGUI(GUI g)
{
    this.gui = g;
}

答案 1 :(得分:0)

解决方案是在示例下使用单例模式:

 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]...

    }
}
相关问题