2013-06-10 5 views
10

ho ottenuto un errore che i cant fix:"a" Non contiene una definizione di "b" e nessun metodo di estensione 'b' accettare un primo argomento di tipo

Error 1 'System.Windows.Forms.Label' does not contain a definition for 'Copy' 
and no extension method 'Copy' accepting a first argument of  
type'System.Windows.Forms.Label' 
could be found (are you missing a using directive or an assembly reference?) 
//path 156 22 FileWatcherEigen 

Questo è stato il mio errore. Qualcuno può aiutarmi e spiegarmi cosa è andato storto?

Questo è il mio codice:

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 

public partial class Form1 : Form 
{ 
    private bool pause = false; 
    private bool cut1 = false; 
    private bool copy1 = false; 

    public Form1() 

    { 
     InitializeComponent(); 
    } 



    // The lines with performed actions of a file 
    private void fileSystemWatcher1_Created(object sender,System.IO.FileSystemEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Created> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Changed> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 
    private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Deleted> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Renamed> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    private void fileSystemWatcher2_Changed(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Changed> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    private void fileSystemWatcher2_Created(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Created> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    private void fileSystemWatcher2_Deleted(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Deleted> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    private void fileSystemWatcher2_Renamed(object sender, System.IO.RenamedEventArgs e) 
    { 
     if (!pause) 
     { 
      listBox1.Items.Add("File Renamed> " + e.FullPath + " -Date:" + DateTime.Now); 
     } 
    } 

    //1st directory 
    private void button2_Click(object sender, EventArgs e) 
    { 
     if (dlgOpenDir.ShowDialog() == DialogResult.OK) 
     { 
      fileSystemWatcher1.EnableRaisingEvents = false; // Stop watching 
      fileSystemWatcher1.IncludeSubdirectories = true; 
      fileSystemWatcher1.Path = dlgOpenDir.SelectedPath; 
      textBox1.Text = dlgOpenDir.SelectedPath;   // Text of textBox2 = Path of fileSystemWatcher2 
      fileSystemWatcher1.EnableRaisingEvents = true; // Begin watching 
     } 
    } 
    //2nd directory 
    private void button3_Click(object sender, EventArgs e) 
    { 
     if (dlgOpenDir.ShowDialog() == DialogResult.OK) 
     { 
      fileSystemWatcher2.EnableRaisingEvents = false; // Stop watching 
      fileSystemWatcher2.IncludeSubdirectories = true; 
      fileSystemWatcher2.Path = dlgOpenDir.SelectedPath; 
      textBox2.Text = dlgOpenDir.SelectedPath;   // Text of textBox2 = Path of fileSystemWatcher2 
      fileSystemWatcher2.EnableRaisingEvents = true; // Begin watching 
     } 
    } 
    //log 
    private void button1_Click(object sender, EventArgs e) 
    { 

     DialogResult resDialog = dlgSaveFile.ShowDialog(); 
     if (resDialog.ToString() == "OK") 
     { 
      FileInfo fi = new FileInfo(dlgSaveFile.FileName); 
      StreamWriter sw = fi.CreateText(); 
      foreach (string sItem in listBox1.Items) 
      { 
       sw.WriteLine(sItem); 
      } 
      sw.Close(); 
     } 
    } 
    //pause watching 
    private void pause_button_Click(object sender, EventArgs e) 
    { 
     if (!pause) 
     { 
      pause = true; 
      pause_button.Text = "Unpause"; 
     } 
     else 
     { 
      pause = false; 
      pause_button.Text = "Pause Watching"; 
     } 
    } 
    //clear listbox 
    private void clear_button_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Clear(); 
    } 

    private void Transfer_Click(object sender, EventArgs e) 
    { 
     if (copy1) 
     { 
      File.Copy(FileBrowseBox.Text, Path.Combine(DestinationBox.Text, Path.ChangeExtension(FileNameBox.Text, Path.GetExtension(FileBrowseBox.Text)))); 
     } 

     } 

    private void Browse_file_Click(object sender, EventArgs e) 
    { 
     DialogResult resDialog = openFileDialog1.ShowDialog(); 
     if (resDialog == DialogResult.OK) 
     { 
      FileBrowseBox.Text = openFileDialog1.FileName; 
     } 
    } 

    private void Browse_destination_Click(object sender, EventArgs e) 
    { 
     DialogResult resDialog = folderBrowserDialog1.ShowDialog(); 
     if (resDialog == DialogResult.OK) 
     { 
      DestinationBox.Text = folderBrowserDialog1.SelectedPath; 
     } 

    } 

    private void CopyButton_CheckedChanged(object sender, EventArgs e) 
    { 
     copy1 = true; 
    } 

} 
} 

Si dice che il problema è all'interno di questa parte:

File.Copy(FileBrowseBox.Text, Path.Combine(DestinationBox.Text, Path.ChangeExtension(FileNameBox.Text, Path.GetExtension(FileBrowseBox.Text)))); 

ho cercato di trovare su questo forum, ma non ho potuto trovare la risposta o una soluzione

Esso funziona con questo codice:

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
public partial class Form1 : Form 
{ 
    private bool cut = false; 
    private bool copy = false; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
{ 
    File.Copy(FileBrowseBox.Text, Path.Combine(DestinationBox.Text, Path.ChangeExtension(FileBox.Text, Path.GetExtension(FileBrowseBox.Text)))); 
    label2.Text = "File Transfer Succeeded"; 
} 

    private void button2_Click(object sender, EventArgs e) 
    { 
     DialogResult resDialog = openFileDialog1.ShowDialog(); 
     if (resDialog == DialogResult.OK) 
     { 
      FileBrowseBox.Text = openFileDialog1.FileName; 
      label2.Text = ""; 
     } 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     DialogResult resDialog = folderBrowserDialog1.ShowDialog(); 
     if (resDialog == DialogResult.OK) 
     { 
      DestinationBox.Text = folderBrowserDialog1.SelectedPath; 
      label2.Text = ""; 
     } 
    } 

    private void radioButton1_CheckedChanged(object sender, EventArgs e) 
    { 
     copy = true; 
    } 

    private void radioButton2_CheckedChanged(object sender, EventArgs e) 
    { 
     cut = true; 
    } 
} 
} 

risposta

17

Si sta verificando questo errore perché si dispone di un'etichetta denominata File sul modulo a cui si fa riferimento anziché su System.IO.File. È possibile rinominare lo Label, che è consigliabile, oppure utilizzare il percorso completo di System.IO.File.Copy.

+1

+1 mi ha battuto. –

+0

@ p.s.w.g, grazie mille, ultimamente ho fatto +1 anche a molti dei tuoi per la stessa ragione. : D –

+0

Ho ricevuto un'etichetta con il nome: "File" e ho cambiato il nome. Ma non ha funzionato. – Loko

8

Apparentemente si dispone di un Label denominato File. Ombre la classe System.IO.File e causa l'errore. Specificando il nome completo della classe dovrebbe eliminare il problema:

System.IO.File.Copy(... 
+0

Ecco perché non si usa mai la maiuscola per i nomi delle variabili, lol. – Nolonar

6

Ok ho ottenuto questo errore fastidioso oggi e “a” DID contiene una definizione per “b”.

Sono entrato in questo caos dopo aver aperto la soluzione in VS2012 e quindi aperto VS2010.

Si risolve eliminando la DLL di riferimento nel progetto interessato, creando il progetto DLL di riferimento, quindi rinominando VS consentito per visualizzare la definizione.

+1

Stavo riscontrando questo problema in VS 2013, quindi ho fatto come suggerito e rimosso il riferimento e l'ho aggiunto. Risolto il problema. –

0

Giusto per notare. Ho ottenuto un errore simile durante il debug, dopo che ho rinominato la proprietà nella classe. Controllato tutto, anche cercato il nome della vecchia proprietà stregone ctrl + maiusc + f5 in tutte le soluzioni. Non è stato trovato nulla ...

Dopo un po 'ho notato un breakpoint esistente con la condizione "When hit ..." per il valore di output della vecchia proprietà.

0

C'è un altro caso semplice in cui ciò accadrà. Diciamo che aggiungete uno strumento come un "Pulsante" al modulo. Dopo aver fatto doppio clic sullo strumento, (in Visual Studio) il codice private void button1_Click(object sender, EventArgs e) { } verrà creato nel Form1.cs. Il codice this.button1.Click += new System.EventHandler(this.button1_Click); verrà creato anche in Form1.Designer.cs. Se hai cancellato il primo set di codice (per qualsiasi motivo), dovrai anche cancellare il secondo bit di codice altrimenti otterrai questo errore. Questa potrebbe essere una situazione specifica/semplice, ma si tratta di un errore in cui potrebbero verificarsi nuovi programmatori.

Problemi correlati