2013-06-10 20 views
10

Annahme bekam ich einen Fehler, die ich fix kippe:„a“ enthält keine Definition für „b“ enthalten und keine Erweiterungsmethode ‚b‘ ein erstes Argument vom Typ

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 

Das ist mein Fehler war. Kann mir jemand helfen und mir erklären, was schief gelaufen ist? mein Code

Dies ist:

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

} 
} 

Es sagt, das Problem in diesem Teil ist:

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

habe ich versucht, es auf diesem Forum zu finden, aber ich die Antwort nicht wirklich finden konnte, oder Lösung

es mit diesem Code funktioniert:

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

Antwort

17

Sie erhalten diesen Fehler, weil Sie in Ihrem Formular ein Label mit der Bezeichnung File haben, das referenziert wird, anstatt System.IO.File. Sie können entweder die Label umbenennen, die ich empfehlen würde, oder Sie können stattdessen den vollständig qualifizierten Pfad System.IO.File.Copy verwenden.

+1

+1 schlagen Sie mich dazu. –

+0

@ p.s.w.g, vielen Dank, ich habe in letzter Zeit viele von euch auch aus dem gleichen Grund + 1'ing bekommen. : D –

+0

Ich habe ein Label mit dem Namen: "File" und ich habe den Namen geändert. Aber es hat nicht funktioniert. – Loko

8

Anscheinend haben Sie eine Label namens File. Es schattiert die System.IO.File Klasse und verursacht den Fehler. vollständige Klassennamen angeben soll das Problem beseitigen:

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

Deshalb verwenden Sie nie Großbuchstaben für Variablennamen, lol. – Nolonar

6

Ok Ich habe diesen ärgerlichen Fehler heute und „a“ DID eine Definition für „b“ enthalten.

Ich habe in dieses Chaos nach dem Öffnen der Lösung in VS2012 und dann Öffnen VS2010.

Wird durch Löschen der Referenz-DLL im betroffenen Projekt, Erstellen des Referenz-DLL-Projekts und erneutes Verweisen auf VS, um die Definition anzuzeigen.

+1

Ich bekam dieses Problem in VS 2013, also tat ich wie Sie vorgeschlagen und entfernt die Referenz und fügte sie zurück. Das Problem wurde behoben. –

0

Nur zu beachten. Ich habe einen ähnlichen Fehler beim Debuggen, nachdem ich die Eigenschaft in der Klasse umbenannt habe. Überprüft alles, sogar nach alten Eigentumsnamen mit Strg + Shift + F5 in allen Lösungen gesucht. Nichts gefunden ...

Nach einer Weile bemerkte ich bestehenden Breakpoint mit 'Wenn getroffen ...' Bedingung, um den Wert der alten Eigenschaft auszugeben.

0

Es gibt einen anderen einfachen Fall, in dem das passiert. Nehmen wir an, Sie fügen Ihrem Formular ein Werkzeug wie einen "Button" hinzu. Sobald Sie auf das Tool (in Visual Studio) doppelklicken, wird der Code private void button1_Click(object sender, EventArgs e) { } in Ihrem Form1.cs erstellt. Der Code this.button1.Click += new System.EventHandler(this.button1_Click); wird auch in Ihrem Form1.Designer.cs erstellt. Wenn Sie den ersten Code-Satz (aus welchem ​​Grund auch immer) gelöscht haben, müssen Sie auch das zweite Code-Bit löschen, sonst erhalten Sie diesen Fehler. Dies kann eine spezifische/einfache Situation sein, aber dies ist ein Fehler, auf den neuere Programmierer stoßen könnten.

Verwandte Themen