Autor |
Beitrag |
Xvidia
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 05.04.10 21:17
Viele kennen das, ich ziehe die Datei in das gewünschte Programm hinein und schon öffnet das Programm die Datei. Jetzt wollte ich wissen, wie man das machen kann.
mfg Xvidia
Moderiert von Kha: Schrift auf Standardgröße gesetzt
|
|
norman2306
      
Beiträge: 222
Erhaltene Danke: 16
Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
|
Verfasst: Mo 05.04.10 22:21
Erstmal musst du die Eigenschaft "AllowDrop" der Form auf true setzen. Dann Doppelklick auf das DropEnter-Event der Form und folgendes rein schreiben:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| private void Form_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; } |
Und dann noch das DragDrop-Event füllen:
C#-Quelltext 1: 2: 3: 4:
| private void Form_DragDrop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); } |
In dem Array stehen dann die Namen der Files, die drauf gezogen wurden. Ich schätze mal, du weißt, wie man die Dateinen dann öffnet. Sonst neuer Thread.
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 05.04.10 22:43
Leider schaff ich es nicht, tut mir leid. Wie kann ich denn den Pfad als String daraus bekommen ?
Moderiert von Kha: Formatierung gedämpft...
|
|
norman2306
      
Beiträge: 222
Erhaltene Danke: 16
Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
|
Verfasst: Di 06.04.10 08:46
Der Pfad steht doch in files drin. Es gibt nicht nur ein Pfad. Da die Möglichkeit besteht, dass der Benutzer mehrere Dateien auf dein Fenster zieht und c# nicht zwischen einen und mehreren Files unterscheidet, gibt es ein Array zurück. Wenn du nicht weißt wie man auf ein Array-Element zugreift, würde ich dir erstmal ein elemtaren C#-Grundlagenkurs empfehlen:
msdn.microsoft.com/d...ibrary/cc405544.aspx
msdn.microsoft.com/d...288436(v=VS.71).aspx
openbook.galileocomp....de/csharp/kap03.htm
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 06.04.10 10:42
Ich habe jetzt schon bischen verstanden. Eine Frage hab ich noch. Wann werden denn die Codezeilen bei DragEnter und DragDrop ausgeführt ?
|
|
norman2306
      
Beiträge: 222
Erhaltene Danke: 16
Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
|
Verfasst: Di 06.04.10 12:01
Wenn du die Events registriert haben solltest, dann sobald du eine Datei auf dein Fenster ziehst. Wenn du die Events nicht registriert hast, dann niemals.
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 06.04.10 13:24
Verstehe nicht, was du mit dem registrieren meinst. Auserdem glaub ich du hast die frage flasch verstanden, oder ich zu ungenau formuliert. Ich wollte nicht, dass man es auf dir Form zieht, sonder auf des Programm Symbol(im Explorer z.B.). Und das Programm, die Datei öffnet, welches ich da fallen gelassen hab.
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Di 06.04.10 13:27
Dann hatte ich es auch falsch verstanden :/
Wenn du eine Datei auf ein "Symbol/Anwendung" ziehst, wird dieses Programm mit dem Parameter der "draufgezogenen" Datei gestartet. Sprich du hast irgendwie MeinProgramm.exe und ziehst nun Datei "c:\test.txt" drauf.
In deiner MeinProgramm.exe hast du den Einstiegspunkt:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| public static void main(string args[]) { if (args.Length > 0 ) { string file = args[0]; } } |
Dort kannst du dann auf den Dateinamen der übergebenen Datei zugreifen.
Gruß
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 06.04.10 14:15
Ich verstehs nicht.. Ich will lediglich den Pfad von der draufgezogenen Datei als String bekommen
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Di 06.04.10 14:38
Was verstehst du daran nicht? Mal versucht?
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Di 06.04.10 15:16
Ja hab ich versucht, was st jetzt der String vom Pfad ??
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 07.04.10 09:55
Kann mir denn keiner helfen ?
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 07.04.10 10:04
args[0] ist der Pfad der Datei (c:\Test.txt).
Mit der Klasse Path oder Directory kannst du den Pfad/Dateinamen etc. auslesen.
Es hilft dir keiner, weil du dein Problem nicht richtig klarstellst und keine eindeutige Frage stellst. Man kann nur raten und das tut man ungern ...
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 07.04.10 10:49
Ich hab jetzt hier mal mein kleinen Codebeispiel. Vllt hilft das weiter.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public static void main(string args[]) { if (args.Length > 0) { string Pfad = args[0]; // Da steht dann "Eine Knvertierung von Typ char ind string ist nicht möglich MessageBox.Show(Pfad); } else { MessageBox.Show("FAIL!"); } } |
Wann werden eigentlich die Codezeilen ausgeführt ?
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 07.04.10 11:01
ohje... Hier findest du die absoluten Grundlagen, weil die will ich dir nicht alle erklären müssen. Darunter findest du auch, dass jedes Programm einen Einstiegspunkt hat (wie bei anderen Programmiersprachen auch) und dieser in C# eben mit public static void Main(string[] args) definiert ist. Sprich, diese Methode wird zu beginn deines Programms aufgerufen.
Meine Methodendeklaration war leider nicht ganz korrekt (string args[]) geht wohl nur bei Java. Daraufhin weißt mich aber nun (Da ich es gerade ausprobiere) der Kompilier hin! Deshalb kann dein Code gar nicht funktionieren, was bedeutet das du mir wohl unsaubere Informationen gibst
Auf jeden Fall: C#-Quelltext 1: 2: 3: 4: 5:
| public static void Main(string[] args) { if (args.Length > 0) MessageBox.Show(args[0]); } | gibt dir das den übergebene Dateinamen aus.
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 07.04.10 11:16
So ich hab jetzt mal bischen was verändert.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| public static void main(string[] args) { if (args.Length > 0) { String Pfad = args[0]; } else { MessageBox.Show("FAIL!"); }
MessageBox.Show(args[0]); } |
Ich hab ein paar Bemerkungen im Code geschrieben kannst du mir vllt sagen, ob ich das richtig verstanden habe. Und irgendwie wird Der Befehl mit der MessageBox nicht ausgeführt. Wie du vorhin erklärt hast , wird "public satic void main" zuerst durchgeführt. Es kommt aber keine MsgBox. Danke für deine Hilfe.
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 07.04.10 11:41
Zu den Kommentaren:
C#-Quelltext
Das ist korrekt, mit der Eigenschaft Length frägst du die Anzahl an Element ab. Mit > 0 überprüfst du ob mehr als 0 existiert, bzw. anders formuliert ob min. 1 Parameter vorhanden ist.
C#-Quelltext 1:
| String Pfad = args[0]; |
Mit den geschweiften Klammern [ ] kannst du bei einem Array auf einen Index zugreifen. Da in diesem Fall in deinem Array die Startparameter/argumente stecken, ist das dann entsprechend Parameter 1, 2.. wobei Indexe immer bei 0 anfangen.
C#-Quelltext 1:
| MessageBox.Show(args[0]); |
Wird ausgeführt! if-Block wird ausgeführt, wenn die BEdingunge (args.Length > 0) wahr ist... ansonsten der Else block.. die letzte Anweisung wird so oder so ausgeführt.. ist ja nicht geschatelt.
So.. Mittag 
|
|
Xvidia 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 07.04.10 12:27
Problem wurde gelöst durch einen doofen Fehler. Hab die ganze Zeit in der flaschen Klasse rumgeschrieben....
|
|