2014-11-18 3 views
1

У меня есть этот метод для открытия и заполнения checklistbox.Checkedlistbox refresh not working

void Show_files() 
    { 

      FolderBrowserDialog FBD = new FolderBrowserDialog(); 
      if (FBD.ShowDialog() == DialogResult.OK) 
      { 

       checkedListBox1.Items.Clear(); 
       string[] files = Directory.GetFiles(FBD.SelectedPath); 
       string[] dirs = Directory.GetDirectories(FBD.SelectedPath); 

       foreach (string file in files) 
       { 
        checkedListBox1.Items.Add(file); 
       } 
       foreach (string dir in dirs) 
       { 
        checkedListBox1.Items.Add(dir); 
       } 
      } 
     } 

и затем нажмите, чтобы удалить выбранные файлы.

private void button1_Click(object sender, EventArgs e) 
    { 
     foreach (var item in checkedListBox1.CheckedItems.OfType<string>().ToList()) 
     { 
      DialogResult dialogResult = MessageBox.Show("Czy na pewno chcesz usunać zaznaczone pliki", "Czy na pewno chcesz usunać zaznaczone pliki?", MessageBoxButtons.YesNo); 
      if (dialogResult == DialogResult.Yes) 
      { 
       File.Delete(item); 
      } 
      } 
     MessageBox.Show("Usunięto"); 
     checkedListBox1.Refresh(); // here should refresh list of folder content 
    } 

Я пытался очистить и добавить элементы снова в цикле (если рассчитывать не нулевой элементы) в методе Show_files(), но это не сработало. Скрыть и не показывать. Я не хочу снова открывать браузер папок. Это должно произойти автоматически.

ответ

0

Вы не вынимая деталь из-под контроля:

if (dialogResult == DialogResult.Yes) 
{ 
    File.Delete(item); 
    checkedListBox1.Items.Remove(item); 
} 

Лучше поставить некоторые Try ... Catch блоки вокруг таких операций.

+0

не может изменять элементы внутри цикла foreach – kennyzx

+0

@kennyzx Это список ToList, поэтому он работает. – LarsTech

+0

все в порядке, не понимал этого; – kennyzx