可以';t将其他类C#中的项目添加到列表框中

本文关键字:项目 添加 列表 其他 可以 | 更新日期: 2023-09-27 18:19:42

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

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"); 
}

我做错了什么?

可以';t将其他类C#中的项目添加到列表框中

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

编辑

建议:

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运行时进行设置(假设它运行正确)。然后您应该会看到您想要的更新。

您可以很容易地使用继承,因为过程的访问修饰符设置为公共

主要类别(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"); 
}