2012-04-02 2 views
0

У меня проблемы с этим методом.combolistbox.Item.Add (FileInfo) несовместим?

Когда я перебираю объекты типа FileInfo в dragdropFiles и каждый раз добавляю их в CLB, я получаю свойство FullName (полный путь к файлу, который мне нужен) возвращается, когда элемент проверен. Однако с помощью hotFolderFiles вместо пути он дает мне только имя файла.

Я не понимаю этого, потому что они добавляют один и тот же тип объекта таким же образом.

(я также пытался получать FileInfo для горячих файлов папок с помощью DirectoryInfo вместо моего словаря с теми же результатами)

Почему такое поведение несовместимо? (и как я могу получить его, чтобы вернуть FILEINFO FULLNAME вместо имени?)

public frmFilesFound(string hotFolderPath, Dictionary<string, FileInfo> dragDropFiles, Dictionary<string, FileInfo> hotFolderFiles, bool ReadOnly) 
    { 
     try 
     { 
      InitializeComponent(); 
      readOnly = ReadOnly; 

      btnSelectAll.Visible = true; 
      clbSelectFilesFound.Visible = true; 
      clbSelectFilesFound.FormattingEnabled = true; 
      clbSelectFilesFound.Format += (s, e) => { e.Value = string.Format("{0}", ((FileInfo)e.ListItem).Name); }; 


      foreach (FileInfo fileInfo in dragDropFiles.Values) 
      { 
       if (!clbSelectFilesFound.Items.Contains(fileInfo)) 
       { 
        try 
        { 
         // If file not already present, add it to listbox 
         clbSelectFilesFound.Items.Add(fileInfo); 
        } 
        catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } 
       } 
      } 
      //intended to be hot folder path 
      if (!String.IsNullOrEmpty(hotFolderPath)) 
      { 
       DirectoryInfo dirInfo = new DirectoryInfo(hotFolderPath); 

       foreach (FileInfo fileInfo in dirInfo.GetFiles()) 
       //foreach (FileInfo fileInfo in hotFolderFiles.Values) 
       { 
        if (!clbSelectFilesFound.Items.Contains(fileInfo)) 
        { 
          try 
          { 
           clbSelectFilesFound.Items.Add(fileInfo); 
          } 
          catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } 
        } 
       } 
      } 
      lblDisplayedSelectMessage.Text = "More than one file is waiting. Please select the files you would like to use."; 
     } 
     catch (Exception ex) 
     { MessageBox.Show(ex.ToString()); } 

    } 

ответ

0

Почему вы просто не всегда Add (fileInfo.FullName)?

+1

Это просто красота выпадающего списка, вы можете добавлять объекты к нему. В противном случае, т. Е. свойство SelectedItem бесполезно. –

+0

Затем установите фильтр данных для данных в «FullName» или пометьте элемент самой файловой системой, для дальнейшего использования. – SimpleVar

+0

Я добавляю объект, потому что хочу отобразить имя файла в comboListBox, но я хочу использовать FullName из результатов выбора. – negligible

1

Это потому, что метод DirectoryInfo.GetFiles заполняет только имя файла, а не полный путь.

Попробуй форматировщик, если вы хотите, чтобы показать имя файла во всех случаях:

clbSelectFilesFound.Format += (s, e) => { e.Value = Path.GetFileNameWithoutExtension(((FileInfo)e.ListItem).Name); };

+0

Я получаю тот же результат, когда я использую свой словарь, см. Пронумерованную строку ниже, а не 'GetFiles()'. Однако словарный механизм работает правильно в первом цикле ForEach. Мое форматирование работает по назначению. – negligible

+0

Да, но мы не видим, откуда берутся файлы dragDropFiles и hotFolderFiles. Поэтому я могу предложить эту работу –

+0

Я не понимаю, почему вы думаете, что это будет работать, это имеет тот же эффект, что и мой существующий Formatter. (и мой вопрос не касался форматирования) И вы можете видеть, что dragdropFiles и hotFolderFiles поступают из конструктора ... – negligible