| 
| Autor | Beitrag |  
| AlanWake 
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Fr 27.08.10 18:14 
 
Hallo Leute,
 ich bins mal wieder    Nach dem ich das Projekt www.c-sharp-forum.de/topic_101225.html  geschafft habe wollte ich dieses noch erweitern.
 Ist es möglich eine .jpg Datei direkt mit einer Windows Form zu öffnen also wenn ich auf die .jpg Datei klicke mit der rechten Maustaste und dann öffne mit auswähle und mein Programm heraussuche    gruß Alan |  |  |  
| Yogu 
          Beiträge: 2598
 Erhaltene Danke: 156
 
 Ubuntu 13.04, Win 7
 C# (VS 2013)
 
 | 
Verfasst: Sa 28.08.10 00:20 
 
Hi,
  DATEITYP REGISTRIEREN ,   DATEITYP REGISTRIEREN  - wer sucht, der findet.    Grüße,
 Yogu Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Sa 28.08.10 00:50 
 
Nein das meinte ich nicht, ich habe mir eine Windows Form mit einer pictureBox1 erstellt gehabt und wollte das wenn ich auf ein Bild mit Doppelklick oder der rechten Maustaste gehe und dann auf öffne mit, und suche unter Projects, WindowsFormsApplication1, WindowsFormsApplication1, obj, x86, Debug, WindowsFormsApplication1.exe heraus, sodas dann das Bild in die pictureBox1 geladen wird    Ist so etwas machbar    Und muss ich dafür die Form1_Load programmieren    gruß Alan |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: Sa 28.08.10 07:31 
 
Hi,
 sowas geht über Kommandozeilenargumente. Ich weiss, es ist eine Windows-Forms-App, geht aber trotzdem:
 		                       C#-Quelltext 
 									| 1:
 | string[] args = Environment.GetCommandLineArgs();					 |  Das könntest Du z.B. im Konstruktur der Form aufgerufen, und dann mit den übergebenen Wert weiterarbeiten. 
 Kleiner Tip: an Stelle 0 steht bei Ausführung immer der komplette Pfad der Anwendung. Wenn also ein Pfad zu einem Bild übergeben wird, dann ab Stelle 1 im Array.
 LG, Marko Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Sa 28.08.10 15:46 
 
Tut mir leid ich habe kein Meter verstanden    Könntest du mir ein Beispiel geben mit deinem Code oder mir sagen wo ich den genau rein kopieren muss als in die Form1.cs oder in die Form1.Designer.cs und wo da    gruß Alan |  |  |  
| Yogu 
          Beiträge: 2598
 Erhaltene Danke: 156
 
 Ubuntu 13.04, Win 7
 C# (VS 2013)
 
 | 
Verfasst: Sa 28.08.10 17:04 
 
Du willst die Datei öffnen, die an das Programm gesendet wurde. Dazu musst du zuerst an den Dateinamen kommen. Wie das geht, hat   Trashkid2000  beschrieben:
 	  |  Trashkid2000 hat folgendes geschrieben  : |  	  | 		                       C#-Quelltext 
 									| 1:
 | string[] args = Environment.GetCommandLineArgs();					 |  | 
 In args  sind nun
 an Stelle 0 der Dateipfad des Programms und
an allen weiteren stellen die Pfade zu den Dateien, die an das Programm gesendet wurden.
 Wenn also mehr als ein Element vorhanden ist, kannst du auf das Element mit dem Index 1 zugreifen, um an den Dateinamen des Bildes zu kommen.
 Nun musst du das Bild nur noch anzeigen. Den Code dürftest du schon haben, momentan wird die Datei ja per Dialog ausgewählt, oder? Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Sa 28.08.10 17:15 
 
Tut mir leid ich verstehe es immer noch nicht    Könntest du mir bitte ein Beispiel Code geben wie du eine Bild Datei öffnen würdest mit Trashkid2000 Code, und bitte nicht in Stichpunkten erklären sondern bitte mit einem Code, sonst verstehe ich es nicht    gruß Alan
 ps. Immoment wähle ich ein Bild mit einem Dialog aus aber das stört einfach das ich erst immer über das Programm gehen muss um eine Datei auszuwählen    pps. Ein Bild öffne ich so:
 		                       C#-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 
 |             OpenFileDialog Bild = new OpenFileDialog();Bild.Filter = "Alle Dateien (*.*)|*.*";
 
 if (Bild.ShowDialog() == DialogResult.OK)
 {
 this.pictureBox1.Image = new Bitmap(Bild.OpenFile());
 }
 Bild.Dispose();
 |  |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: Sa 28.08.10 20:00 
 
Hi,
 ich bins wal wieder     Also, die Methode kannst Du z.B. direkt im Konstruktor der Form aufrufen, oder halt auch auslagern.
 Hier mal der Weg im Konstruktor:
 		                       C#-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 
 | public Form1(){
 InitializeComponent();
 string[] args = Environment.GetCommandLineArgs();
 if (args.Length > 1)
 {
 pictureBox1.Image = Image.FromFile(args[1]);
 }
 }
 |  Allerdings wird bei diesem Code halt nur das erste Bild in der pictureBox angezeigt. Also, wenn ich mehrere Bilder ausgewählt habe, müsstest Du festlegen, wie mit den anderen verfahren wird.
 LG, Marko Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Sa 28.08.10 21:12 
 
@ Trashkid2000: Du bist mein Superheld ^^
 Ich habe jetzt für Bild,Musik,Text den Code geschrieben    Mein Problem jetzt ist, ich habe eine pictureBox, eine richtextBox und einen axWindowsMediaPlayer, wie kann ich es bei der IF programmieren das erkannt wird welche Datei ich versuche zu öffnen, nähmlich es sollen immer 2 von den 3 versteckt sein also wenn ich ein Bild hinein lade, das er nur die pictureBox anzeigt und bei den anderen das gleiche    gruß Alan
 ps. Mein Code zu Bild,Musik,Text:
 		                       C#-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 
 |                 pictureBox1.Image = Image.FromFile(args[1]);listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(args[1]), "*.jpg"));
 listBox1.SelectedItem = args[1];
 WindowsMediaPlayer1.Hide();
 richTextBox1.Hide();
 pictureBox1.Show();
 listBox1.Select();
 
 Text = args[1];
 richTextBox1.LoadFile(Text, RichTextBoxStreamType.RichText);
 WindowsMediaPlayer1.Hide();
 richTextBox1.Show();
 pictureBox1.Hide();
 
 WindowsMediaPlayer1.URL = args[1];
 WindowsMediaPlayer1.Show();
 richTextBox1.Hide();
 pictureBox1.Hide();
 |  |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Sa 28.08.10 22:31 
 
Ich habe bis jetzt herausgefunden das ich mit dem Code 2 von 3 öffnen kann:
 		                       C#-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 
 |         public Form1(){
 InitializeComponent();
 pictureBox1.Hide();
 richTextBox1.Hide();
 axWindowsMediaPlayer1.Hide();
 string[] args = Environment.GetCommandLineArgs();
 if (args.Length > 1)
 {
 try
 {
 pictureBox1.Image = Image.FromFile(args[1]);
 pictureBox1.Show();
 }
 catch
 {
 Text = args[1];
 richTextBox1.LoadFile(Text, RichTextBoxStreamType.RichText);
 richTextBox1.Show();
 }
 }
 }
 |  Ich weiß es sieht ziemlich verwirrend aus    Brauche Hilfe    gruß Alan |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: So 29.08.10 17:03 
 
Hi,
 Sorry, aber diese Lösung ist nicht wirklich gut. 
 Da ist das try..catch ganz schön misshandelt und nicht zweckgemäß eingesetzt. Und vor allen Dingen könnte im catch-Block auch noch ein Fehler auftreten. 
 Was ich aber auch lustig finde, wenn man versucht, einen Text als Bild anzuzeigen, dass dann eine OutOfMemoryException geschmissen wird!? Ich meine, nicht anzeigbar und kein Speicher ist schon ein Unterschied. Aber na ja.
 Also, eine Unterscheidung von Dateitypen kann schon eine Wissenschaft für sich sein. Schon, wenn man Texte mit verschiedenen Encodings verarbeiten will, muss man schon ganz schön viel Ahnung haben. 
 Es gibt schon Dateitypen, die eine eindeutige Signatur besitzen, und die man auch auslesen könnte, aber halt (leider) nicht alle.
 Für Dein Projekt würde ich vorschlagen, dass Du nach der Dateiendung des Dateinamens, der übergeben wird, unterscheiden tust, wie der Inhalt angezeigt werden soll. Habe das davor geschrieben, weil diese Lösung nicht der beste Weg ist. Denn eine Dateiendung muss erstens nicht vorhanden sein und könnte ich zweitens auch einfach ändern. 
 So eine Unterscheidung würde dann so aussehen:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 
 | string[] args = Environment.GetCommandLineArgs();
 if (args.Length > 1)
 {
 FileInfo fi = new FileInfo(args[1]);
 switch (fi.Extension.ToLower())
 {
 case ".jpg":
 case ".jpeg":
 case ".bmp":
 case ".png":
 {
 pictureBox1.Image = Image.FromFile(args[1]);
 break;
 }
 case ".txt":
 case ".rtf":
 {
 break;
 }
 case ".avi":
 case ".mpg":
 case ".mpeg":
 {
 break;
 }
 default:
 {
 MessageBox.Show("Nicht unterstütztes Dateiformat");
 break;
 }
 }
 }
 |  Bestimmt sind noch nicht alle Dateiendungen drin, die denn durch Dein Programm ünterstützt werden würden, und auch einen Fehlerbehandlung muss auf jeden Fall auch noch rein.
 LG, Marko Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: So 29.08.10 18:10 
 
Ich weiß das meine Lösung eine Katastrophe ist    Ich weiß nicht mal für was try und catch gut ist ^^, ich habe das einfach ausprobiert gehabt, weil ich dachte wenn ich nur try schreibe also zu Deutsch, versuche, glaute ich das das Programm es nur Versucht und wenn es nicht klappt einfach weitermacht    ^^
 Aber dann hatte ich die Fehlermeldung das entweder catch oder finnaly dazu geschrieben werden müsste, so hatte ich beide ausprobiert und bei catch hat es dann funktioniert ^^
 Werde deinen Code nacher gleich ausprobieren, bin gerade am falschen Computer    gruß Alan
 ps. Bei switch und case habe ich auch noch nicht so wirklich durchgeblickt, bin halt ein hoffnungsloser Fall ^^ |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: So 29.08.10 20:11 
 
	  |  AlanWake hat folgendes geschrieben  : |  	  | bin halt ein hoffnungsloser Fall ^^ | 
 Du fängst doch gerade mit der Programmierung an. Und jeder hat mal klein angefangen. Es kommt nur auf das Verständnis und der Fähigkeit des analytischen Denkens an. Also nicht so schnell den Kopf in den Sand stecken!
 Ansonsten, try...catch...finally ist eine Fehlerbehandlungsroutine. Im try-Block stehen die Anweisungen, die kurz gesagt schief gehen können, im catch-Block dann, was im Falle einer Exception (dabei sollte man auch die auftretenden Exceptions unterscheiden) zu tun ist, und der finally-Anweisung stehen Anweisungen, die mit und ohne Fehler ausgeführt werden - also IMMER.
 Aber das solltest Du mal in einem schlauen Buch nachlesen!
 Hier noch eine Lösung, die noch viel eleganter ist, wie ich finde.
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 
 | private Dictionary<string, FileType> fileTypes = null;public enum FileType
 {
 Text,
 Graphic,
 Video
 }
 
 public Form1()
 {
 InitializeComponent();
 
 fileTypes = new Dictionary<string, FileType>()
 {
 {".jpg", FileType.Graphic},
 {".jpeg", FileType.Graphic},
 {".bmp", FileType.Graphic},
 {".png", FileType.Graphic},
 {".txt", FileType.Text},
 {".rtf", FileType.Text},
 {".avi", FileType.Video},
 {".mpg", FileType.Video},
 {".mpeg", FileType.Video}
 };
 
 string[] args = Environment.GetCommandLineArgs();
 
 if (args.Length > 1)
 {
 FileInfo fi = new FileInfo(args[1]);
 string extension = fi.Extension.ToLower();
 if (fileTypes.ContainsKey(extension))
 {
 switch (fileTypes[extension])
 {
 case FileType.Text:
 break;
 case FileType.Graphic:
 pictureBox1.Image = Image.FromFile(args[1]);
 break;
 case FileType.Video:
 break;
 }
 }
 else
 {
 MessageBox.Show("Nicht unterstützter Dateityp");
 }
 }
 }
 |  LG, Marko Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Mo 30.08.10 01:05 
 
Es funktioniert mal wieder einbandfrei, mein C# Held ^^    Ich wollte von Anfang an was mit .mp3,.jpg Erkennung    Wegen dir habe ich jetzt nach Jahrelanger Arbeit mein Programm endlich fertig schreiben können    Und das mein Programm wenn er den Datei Typ nicht erkennt die Fehlernaricht kommt, ist einfach nur genial    Vielen vielen dank Trashkid2000    Ich verstehe sogar den Code ein bisschen    , ich habe zu den 3 FileTypes noch ein 4 hinzugefügt, Music    Code:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 
 |       private Dictionary<string, FileType> fileTypes = null;public enum FileType
 {
 Text,
 Graphic,
 Music,
 Video
 }
 public Form1()
 {
 InitializeComponent();
 pictureBox1.Hide();
 richTextBox1.Hide();
 axWindowsMediaPlayer1.Hide();
 fileTypes = new Dictionary<string, FileType>()
 {
 {".jpg", FileType.Graphic},
 {".jpeg", FileType.Graphic},
 {".bmp", FileType.Graphic},
 {".png", FileType.Graphic},
 {".txt", FileType.Text},
 {".rtf", FileType.Text},
 {".mp3", FileType.Music},
 {".avi", FileType.Video},
 {".mpg", FileType.Video},
 {".mpeg", FileType.Video}
 };
 
 string[] args = Environment.GetCommandLineArgs();
 
 if (args.Length > 1)
 {
 FileInfo fi = new FileInfo(args[1]);
 string extension = fi.Extension.ToLower();
 if (fileTypes.ContainsKey(extension))
 {
 switch (fileTypes[extension])
 {
 case FileType.Text:
 Text = args[1];
 richTextBox1.LoadFile(Text, RichTextBoxStreamType.RichText);
 richTextBox1.Show();
 break;
 case FileType.Graphic:
 pictureBox1.Image = Image.FromFile(args[1]);
 pictureBox1.Show();
 break;
 case FileType.Music:
 axWindowsMediaPlayer1.URL = args[1];
 axWindowsMediaPlayer1.Show();
 break;
 case FileType.Video:
 axWindowsMediaPlayer1.URL = args[1];
 axWindowsMediaPlayer1.Show();
 break;
 }
 }
 else
 {
 MessageBox.Show("Nicht unterstützter Dateityp");
 }
 }
 }
 |  gruß Alan
 ps. Ich hatte am Anfang Probleme mit dem Code weil das Programm FileInfo nicht erkannt hat aber nachdem ich 
 using System.IO; hinzugeschrieben hatte war das kein Problem mehr gewesen   |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: Mo 30.08.10 04:46 
 
Schön,
 aber die Fehlerbehandlung fehlt noch! Die muss auf jeden Fall noch rein,
 denn bei der Arbeit mit Dateien kann immer was schief gehen.
 Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Mo 30.08.10 20:13 
 
Welche Fehlerbehandlung meinst du    gruß Alan |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: Mo 30.08.10 20:42 
 
Nun ja, es können diese Fehler auftreten:
 1. auf die Datei, die per Argument übergeben wurde, kann nicht zugegriffen werden, weil sie nicht existiert
 2. auf die Datei, die per Argument übergeben wurde, kann nicht zugegriffen werden, weil keine Berechtigungen vorhanden sind
 3. auf die Datei, die per Argument übergeben wurde, kann nicht zugegriffen werden, weil ein anderer Prozess sie blockiert
 4. die Datei mit der Endung ist nicht der Typ, als welche sie sich ausgibt - es wird die falsche Anzeige gewählt - bum- Exception
 5. die Datei ist fehlerhaft und kann nicht angezeigt bzw. abgespielt werden
 6. irgendein anderer Fehler ist aufgetreten
 
 
 Habe ich noch irgendwas vergessen? Ich denke aber, dass mit "irgendein anderer Fehler ist aufgetreten" eigentlich alle Fälle abgefangen sind!
 
 Fehlerbehandlung ist nicht einfach - zugegeben. Und vor allen Dingen an alle Fehler zu denken, die denn auftreten könnten... aber man muss an alles denken. Gerade, wenn denn Benutzer ins Spiel kommen!
 
 Also, zum Anfang würde ich prüfen , ob denn die Dateiendung ausgelesen werden kann. Damit müssten eigentlich Fehlerfall 1 und 2 abgefangen werden.
 
 Die Fehlerfälle 3-6 kannst Du nur prüfen, indem Du versuchst, die Datei zu öffnen. Also so, wie Du die Datei zur Anzeige bringst. Da müsstest Du die Fehlerbehandlung reinsetzen.
 
 Programmiern ist nicht einfach -  es ich zwar ziemlich leicht, lauffähige Programme zu erstellen, aber dass diese auch fehlerfrei bzw. absturzsicher laufen, ist schon schwieriger!!
 
 Marko
 Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  
| AlanWake  
          Beiträge: 75
 Erhaltene Danke: 2
 
 
 
 
 | 
Verfasst: Mo 30.08.10 20:49 
 
Bis jetzt hatte ich noch keine Probleme gehabt    Kann aber auftreten    Ich glaube besonders der Fehler 3, den hatte ich schon oft bei anderen Programmen gehabt oder wenn ich versucht hatte eine Datei zu löschen    gruß Alan
 Kann ich nicht einfach die Form schliesen wenn ein Fehler auftritt, also this.Close();   |  |  |  
| Trashkid2000 
          Beiträge: 561
 Erhaltene Danke: 137
 
 
 
 
 | 
Verfasst: Mo 30.08.10 21:24 
 
Na ja, der Benutzer sollte schon darüber informiert werden, was für ein Fehler aufgetreten ist, und vielleicht auch, warum der Fehler aufgetreten ist. 
 Bei einem Close des Programms könntest Du die Fehlerbehandlung auch gleich ganz weglassen, was macht das schon für einen Unterschied, ob das Programm sich einfach schließt (ohne Meldung) oder ganz einfach abstürzt. Da wär der 2. Weg sogar noch der bessere, da der Beutzer dann noch wertvolle Informationen auslesen kann!
 
 Nein ehrlich, die Form einfach zu schließen ist nicht toll!
 Fehlerbehandlung sollte auch immer eine Information an den Benutzer weitergeben - oder wenn keine Interaktion mit einem Benutzer, dann wenigstens irgendwo speichern. Z.B. in einer LOG-Datei. Aber die wird dann meistens auch von einem Benutzer gelesen oder analysiert...
 
 Marko
 Für diesen Beitrag haben gedankt: AlanWake
 |  |  |  |