2016-09-13 7 views
0

У меня есть ListBox, который заполняется записями из папки, состоящей из текстовых файлов (в поле списка берутся только имена файлов). У меня проблемы с обновлением списка при каждом добавлении файлов. Вы добавляете файлы/поручения, нажимая кнопку в основной программе, которая выдает второе окно, в котором вы записываете свое поручение и выбираете его приоритет (низкий, средний или высокий).Update ListBox из другого класса, не работающего

Желаемый эффект будет заключаться в том, что окно списка будет обновляться при добавлении новых текстовых файлов/поручений, чтобы включить его, однако на данный момент это не так, и я попытался привести примеры в сети посредством используя DataStore и Binding среди прочего, но пока ничего не работало. Основная программа выглядит следующим образом:

How the errand system looks like.

P.S. Программа наполовину шведская, но по существу, «Skapa lapp» = «Create errand», которая здесь является единственной важной.

И это изображение ниже просто для того, чтобы показать вам, как работают окна списка и поручения/текстовые файлы (текстовые файлы добавляются в поле списка с помощью цикла foreach).

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

При создании нового поручения (Skapa Lapp-кнопка), вы будете представлены в новом окне:

The window when creating a new errand.

При написании нового поручения в этом окне и выбирая приоритет, затем нажмите «Создать поручение» (или 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. 
        } 
       } 

Назад к главному окну (Lapphantering), окно списка обновляется только при перезапуске приложения снова и пусть основная программа добавить файлы инициализации компонента:

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

Итак, как можно Я обновляю/обновляю окно списка каждый раз, когда добавляю новый файл errand/text без необходимости перезапуска приложения каждый раз?

+0

Do вы получаете исключение в попытке? –

+0

Нет, ничего. – tobulos1

+0

Когда вы делаете это: 'uppdateraFönster.listBoxLappar.Items.Add (textBoxLappText.Text);' вы пишете в список в новом классе 'Lapphantering uppdateraFönster = new Lapphantering();' вместо передачи текущего класса. Это означает, что вы добавляете элементы в совершенно другой список. – KSib

ответ

4

Проблема заключается в том, что вы создаете новый экземпляр Lapphantering и редактируете его значение. Измените это в вашей программе сСт:

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

Или вы можете сделать это, передав 'mainForm' в качестве параметра при отображении другого окна. –

Смежные вопросы