gpt4 book ai didi

C# 从不同的类向 MainForm ListBox 添加项目

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:04 24 4
gpt4 key购买 nike

我对编程还很陌生,并且已经开始了一个项目,我试图将程序的功能分成类,每个类处理与程序的特定部分相关的大部分内容。

我有一个名为 DirectoryMonitors 的类,它创建一个对象来监视带有 FileSystemWatcher 的目录。我正在尝试从这个 DirectoryMonitors 类的实例向 MainForm 上的 ListBox 添加项目。但是,似乎我无法调用 MainForm 中的方法,除非它是静态的 - 但如果它是静态的,我将无法访问我的 ListBox。

我的 DirectoryMonitor 类的相关部分:

public class DirectoryMonitorData
{
public bool WatcherActive { get; set; } = true;
public string EQVersion { get; set; }
public string FolderLocation { get; set; }
}

public class DirectoryMonitor : DirectoryMonitorData
{

private void FolderWatcher_Changed(object sender, FileSystemEventArgs e)
{
FileInfo fi = new FileInfo(e.FullPath);
if (!IsFileLocked(fi))
{
int startPos = e.FullPath.LastIndexOf("\\") + 1;
int endPos = e.FullPath.IndexOf("-Inventory") - startPos;
string character = e.FullPath.Substring(startPos, endPos);
MessageBox.Show(character);

string[] delimiters = { ControlChars.Tab.ToString() };
using (TextFieldParser parser = Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFieldParser(e.FullPath, delimiters))
{
// Process the file's lines.
while (!parser.EndOfData)
{
try
{
string[] fields = parser.ReadFields();
MainForm.addLogToListBox(fields[0]);
for (int i = 1; i <= 5; i++)
{

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}

private bool IsFileLocked(FileInfo file)
{
...
}
}

我的 MainForm 类的相关部分:

    public partial class MainForm : Form
{


public MainForm()
{
InitializeComponent();
}


public void addLogToListBox(string logMessage)
{
logsListBox.Items.Insert(0, logMessage);
}
}

更新代码:

    public FileSystemWatcher FolderWatcher = new FileSystemWatcher();

public DirectoryMonitor()
{
FolderWatcher.NotifyFilter = NotifyFilters.LastWrite;
FolderWatcher.Filter = "*-Inventory.txt";
FolderWatcher.Changed += FolderWatcher_Changed;
}

public void setupDirectoryMonitorList()
{
foreach (DirectoryMonitorData dmd in MainForm.directoryMonitorList)
{
DirectoryMonitor dm = new DirectoryMonitor()
{
WatcherActive = dmd.WatcherActive,
FolderLocation = dmd.FolderLocation,
EQVersion = dmd.EQVersion
};

if (dm.WatcherActive)
{
dm.FolderWatcher.Path = dm.FolderLocation;
dm.FolderWatcher.EnableRaisingEvents = true;
dm.FolderWatcher.NotifyFilter = NotifyFilters.LastWrite;
dm.FolderWatcher.Filter = "*-Inventory.txt";
dm.FolderWatcher.Changed += FolderWatcher_Changed;
}
MainForm.directoryMonitorObjects.Add(dm);
}
}

最佳答案

将属性添加到您的 DirectoryMonitorData 类并将列表框传递给它:

public class DirectoryMonitorData
{
public bool WatcherActive { get; set; } = true;
public string EQVersion { get; set; }
public string FolderLocation { get; set; }
public ListBox Logs {get; set;}
}

然后:

DirectoryMonitor monitor = new DirectoryMonitor  { Logs = logsListBox };

现在在您的类里面,您可以简单地向该列表框添加任何内容:

Logs.Items.Add(Something);

关于C# 从不同的类向 MainForm ListBox 添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52710392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com