无法将项目添加到另一个类C#的列表框中

时间:2012-01-06 15:11:33

标签: c# winforms

我正在尝试从另一个类向列表框添加项目,信息传递给函数但列表框似乎没有更新。这是我的代码:

Main class (FORM) :

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    // the function that updates the listbox
    public void logURI(string OutputLog, string Information, string JOB)
    {
        try
        {
            listBox1.BeginUpdate();
            listBox1.Items.Insert(0, DateTime.Now.ToString() + " : " + JOB + " " + Information);
            listBox1.Items.Add("1");
            listBox1.EndUpdate();
            textBox1.Text = JOB;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

第二课:

public class FtpFileSystemWatcherTS
{
     Form1 logs = new Form1();
     logs.logURI( "", "Found folder modefied today (" + FileName.TrimEnd(), ") ElectricaTS"); 
}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您正在从另一个类中创建Form - 您为Form的子项所做的任何更改都不会显示,因为它是另一个正在显示的表单。相反,您希望将正在运行的Form实例传递到FtpFileSystemWatcher类,以便它可以访问Form.Controls属性,或者让它直接访问ListBox } {或ListBox项目的来源。

修改

建议:

public partial class Form1 : Form
{
    private FtpFileSystemWatcher mWatcher;

    // ... some code ...

    public Form1()
    {
        InitializeComponent();

        // Create a new watcher and give it access to this form
        mWatcher = new FtpFileSystemWatcher(this);
    }

    // ... Logging code ...
}

public class FtpFileSystemWatcher
{
    private Form1 mMainForm;

    public FtpFileSystemWatcher(Form1 mainForm)
    {
        mMainForm = mainForm;
    }

    public void Log()
    {
        mMainForm.logUri(...);
    }
}

这只是一些代码格式的示例,您可以使用它来FtpFileSystemWatcher访问正在运行的Form。这将在Form运行时设置(假设您正确运行)。然后,您应该看到所需的更新。

答案 1 :(得分:0)

您可以轻松使用继承,因为过程的访问修饰符设置为public

主类(FORM):

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();

    }

   // the function that updates the listbox
   public void logURI(string OutputLog, string Information, string JOB)
    {
        try
        {
            listBox1.BeginUpdate();
            listBox1.Items.Add("0");
            listBox1.Items[0] = DateTime.Now.ToString() + " : " + JOB + " " + Information;
            listBox1.Items.Add("1");
            listBox1.EndUpdate();
            textBox1.Text = JOB;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

}

public class FtpFileSystemWatcherTS : Form1
{
     logURI( "", "Found folder modefied today (" + FileName.TrimEnd().toString(), ") ElectricaTS"); 
}