从另一个类中更新ListBox不起作用

时间:2016-09-13 16:57:01

标签: c# winforms listbox

我有一个ListBox,其中填充了由文本文件组成的文件夹中的条目(列表框仅显示文件的名称)。每次添加文件时,我都无法刷新列表框。您可以通过按主程序中的按钮来添加文件/差事,这会显示第二个窗口,您可以在其中编写差事并选择其优先级(低,中或高)。

期望的效果是列表框在添加新的文本文件/差事时会自动更新,包含它,但是,目前情况并非如此,我尝试使用网上的示例进行操作Bindingforeach等等,但到目前为止都没有。主程序如下:

How the errand system looks like.

P.S。该程序是半瑞典语,但基本上,“Skapa lapp”=“创造差事”,这是唯一重要的一个。

下面这张图片只是为了向您展示列表框和差事/文本文件如何协同工作(文本文件通过private string mappNamn = @"C:\Errands\"; Lapphantering uppdateraFönster = new Lapphantering(); private void buttonSkapaLapp_Click(object sender, EventArgs e) { try { //When choosing the low priority radio button, do this: if (radioButtonLågPrio.Checked) { using (var file = new StreamWriter(Path.Combine(mappNamn, "1 - " + textBoxLappText.Text + ".txt"))) { uppdateraFönster.listBoxLappar.Items.Add(textBoxLappText.Text); uppdateraFönster.Update(); //This doesn't work. uppdateraFönster.Refresh(); //Nor does this. } } 循环添加到列表框中)。

Here is the actual files that are added in the list box.

创建新差事(Skapa lapp-button)时,您将看到一个新窗口:

The window when creating a new errand.

在此窗口中编写新差事并选择优先级然后按“创建差事”(或Skapa lapp)时,按钮单击(简化版)将发生以下情况:

public Lapphantering()
        {
            InitializeComponent();

            //For each file, add new files to the list box.
            DirectoryInfo dinfo = new DirectoryInfo(@"C:\Errands\");
            FileInfo[] Filer = dinfo.GetFiles("*.txt");
            mappNamn = dinfo.FullName;
            foreach (FileInfo file in Filer)
            {
                listBoxLappar.Items.Add(Path.GetFileNameWithoutExtension(file.Name));
            }
        }

回到主窗口(Lapphantering),只有在重新启动应用程序时才更新列表框,让主程序通过初始化组件来添加文件:

{{1}}

那么,每次添加新的差事/文本文件时如何刷新/更新列表框而不必每次都重新启动应用程序?

2 个答案:

答案 0 :(得分:4)

问题是你正在创建一个新的Lapphantering实例并在那里编辑值。在程序cs中更改此内容:

    public static Lapphantering mainForm;        
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]

    static void Main()
    {
        mainForm = new Lapphantering(); // create instance of Lapphantering
        Application.Run(mainForm);
    }

然后在你的另一个窗口中执行此操作:

            if (radioButtonLågPrio.Checked)
            {
                using (var file = new StreamWriter(Path.Combine(mappNamn, "1 - " + textBoxLappText.Text + ".txt")))
                {
                   Program.mainform.listBoxLappar.Items.Add(textBoxLappText.Text);
                  Program.mainform.listBoxLappar.Update();
                  Program.mainform.listBoxLappar.Refresh(); // access mainform in Program 
                }
            }

这应该可以解决你正在编写program.cs中的一个对象

答案 1 :(得分:0)

您正在寻找文件系统监视器。这可能会有所帮助:https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx