我正在尝试从另一个类向列表框添加项目,信息传递给函数但列表框似乎没有更新。这是我的代码:
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");
}
我做错了什么?
答案 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");
}