-1

私は持ってlistBox1listBox2て、ディレクトリからいくつかのファイルがロードされています。listBox1最初にフォームをロードするときに、とのボタンを無効にしましたlistBox2

listBox1ディレクトリにファイルがない場合、button1forとbutton2を無効にします listBox2

buttonsしかし、対応するのlistBox1を有効にしたいのlistBox2ですが、ディレクトリに単一のファイルがあり、ファイルに変更がある場合。

FileSystemWatcher???を使用してこれを実行するにはどうすればよいです か?これを実行するには、いくつかのアイデアが必要です。

private void PopulateListBox(ListBox lsb, string Folder, string FileType)
{
  DirectoryInfo dinfo = new DirectoryInfo(Folder);
  FileInfo[] Files = dinfo.GetFiles(FileType);
  foreach (FileInfo file in Files)
  {
    lsb.Items.Add(file);
  }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  FileInfo file = (FileInfo)listBox1.SelectedItem;
  string path = file.FullName;
  DisplayFile(path);
}

private void button1_Click(object sender, EventArgs e)
{

}


private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
{

}

ここでメソッドを初期化しました。ここからどのように進めることができますか?

public void filesystemwatcher()
{
  FileSystemWatcher watcher = new FileSystemWatcher();
  watcher.Path = @"C:\LoadFiles\";                      
}
4

1 に答える 1

2

FileSystemWatcherでBindingListを使用できます。

BindingList<string> _Files = new BindingList<string>();

public Form1() {
  InitializeComponent();

  _Files.ListChanged += new ListChangedEventHandler(Files_ListChanged);
  fileSystemWatcher1.Deleted += fileSystemWatcher1_Deleted;
  fileSystemWatcher1.Created += fileSystemWatcher1_Created;
  fileSystemWatcher1.Renamed += fileSystemWatcher1_Renamed;
  fileSystemWatcher1.Path = @"C:\TestLoadFiles\";

  foreach (string f in Directory.GetFiles(fileSystemWatcher1.Path)) {
    _Files.Add(Path.GetFileName(f));
  }
  listBox1.DataSource = _Files;
}

private void Files_ListChanged(object sender, ListChangedEventArgs e) {
  button1.Enabled = (_Files.Count > 0);
}

private void fileSystemWatcher1_Renamed(object sender, RenamedEventArgs e) {
  _Files[_Files.IndexOf(e.OldName)] = e.Name;
}

private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e) {
  _Files.Remove(e.Name);
}

private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e) {
  _Files.Add(e.Name);
}
于 2012-05-15T13:54:40.227 に答える