Autor Beitrag
Xvidia
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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 user profile iconKha: Schrift auf Standardgröße gesetzt
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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 user profile iconKha: Formatierung gedämpft...
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public static void main(string args[])
{
    if (args.Length > 0 )
    {
         // handle file "C:\test.txt"
         string file = args[0];
    }
}


Dort kannst du dann auf den Dateinamen der übergebenen Datei zugreifen.

Gruß
Xvidia Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 06.04.10 14:15 
Ich verstehs nicht.. Ich will lediglich den Pfad von der draufgezogenen Datei als String bekommen
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 06.04.10 14:38 
Was verstehst du daran nicht? Mal versucht?
Xvidia Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 06.04.10 15:16 
Ja hab ich versucht, was st jetzt der String vom Pfad ??
Xvidia Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 07.04.10 09:55 
Kann mir denn keiner helfen ?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 07.04.10 10:49 
Ich hab jetzt hier mal mein kleinen Codebeispiel. Vllt hilft das weiter.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 07.04.10 11:16 
So ich hab jetzt mal bischen was verändert.
ausblenden 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// Überpfrüfung, ob Parameter vorhanden ist
            {
                String Pfad = args[0]; // args[0] = der Parameter ??
            }
            else
            {
                MessageBox.Show("FAIL!");
            }

            MessageBox.Show(args[0]); // Wird nicht durchgeführt
        }


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mi 07.04.10 11:41 
Zu den Kommentaren:
ausblenden C#-Quelltext
1:
if (args.Length > 0// Überpfrüfung, ob Parameter vorhanden ist					

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.
ausblenden C#-Quelltext
1:
String Pfad = args[0]; // args[0] = der Parameter ??					

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.
ausblenden C#-Quelltext
1:
MessageBox.Show(args[0]); // Wird nicht durchgeführt					

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 :D
Xvidia Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 07.04.10 12:27 
Problem wurde gelöst durch einen doofen Fehler. Hab die ganze Zeit in der flaschen Klasse rumgeschrieben....