这里有一些初学者在谷歌搜索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中添加一行”嘿伙计,我发送了一封愚蠢的电子邮件“......
答案 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]...
}
}