ListBox Problem



  • Hey alle miteinander,

    ich komm gleich zur Sache.Ich benutze Visual Studio C++ 2005 und versuche gerad eine MP3-Datei mit einem openfiledialog in eine listbox zu laden.nur funktionierts eben nicht so wie ich des gern hätte.ich hab auch schon Google gequält und ein paar Sachen gefunden aber nichts wirklich brauchbares.Kann mit jemand von euch weiterhelfen.Unter Borland C++ 6 hab ich es hinbekommen.



  • Was hast du vor? 😕
    Kannst du mal das Ergebnis zeigen? (Das von Borland)

    Ich kann mir gerade nicht vorstellen, wie man eine MP3-Datei in eine Listbox kriegt.



  • Uups Sorry.Hatte vergessen zu erwähnen das das mit nem Button passiert.Also ich klicke auf nen Button,es öffnet sich ein Dialogfenster und ich klicke auf ne Mp3 Datei und diese ladet sich in die Listbox rein.So funzt es unter Borland 6.Nur net unter Visual C++.



  • Okay, sowas in der Art hatte ich vorausgesetzt. 😉
    Ich weiß wirklich nicht, was danach in der Listbox stehen soll.

    Also welcher Befehl dir nun fehlen könnte...

    Ich könnte ja erstmal pauschal mit AddString, InsertString oder gar http://msdn.microsoft.com/library/en-us/vcmfc98/html/_mfc_clistbox_class_members.asp?frame=true um mich werfen. 😉



  • Hier ist mal der Borland Quelltext:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
    {
    for(int i=0; i<OpenDialog1->Files->Count; ++i)
    {
    ListBox1->Items->Add(ExtractFileName(OpenDialog1->Files->Strings[i]));
    ListBox2->Items->Add(OpenDialog1->Files->Strings[i]);
    }
    }
    }



  • Wenn DoModal() vom CFileDialog mit IDOK zurückkehrt, dann rufst Du GetFileName() (ggfs. auch noch GetFileExt()) auf und danach packst Du das Ergebnis mit AddString() in Deine Listbox

    So in der Art:

    CListBox m_fileListBox;
    .
    .
    .
    CFileDialog fileDlg(...);
    if (fileDlg.DoModal() == IDOK)
    {
        m_fileListBox.AddString(fileDlg.GetFileName());  
    }
    

    Ist allerdings ungetestet aus dem Kopf hingekloppt und soll Dir nur eine Idee davon geben, wie das funktionieren könnte.



  • Aha, okay nun hab ich es. 😉

    Wie weit bist du denn? Muss ich bei 0 anfangen?
    Im Prinzip brauchst du nur einen CFileDialog und eine Controlvariable für die Liste.

    Hmm, nur ein Beispiel für ne Mehrfachauswahl hab ich nicht. 😞
    Aber für Einzel:

    CFileDialog fileDlg (TRUE, 
    						 _T(""), 
    						 _T(""), 
    						 OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, 
    						 _T("Lied (*.mp3)|*.mp3||"), 
    						 AfxGetMainWnd());
    	// Dialog anzeigen
    	if (IDOK == fileDlg.DoModal())
    	{
    		// Den Dateinamen abfragen
    		CString strFileName = fileDlg.GetPathName();
    		m_listbox.AddString(strFileName);
    	}
    

    🙂
    Ungetestet, sollte aber gehen.



  • also ich bin soweit dsa ich den openfiledialog öffnen kann.hab auch schon den filter eingebaut.nur eben beim anklicken der Datei geht diese nicht in die listbox.mir happerts nur an dieser einen syntax.Also vom Opendialog in die Listbox rein.



  • Das ist Zeile 12 in meinem Code.
    Oder fehlt dir auch noch die Membervariable? Dann solltest du die noch erstellen. 😉



  • Hier hast du mal den aktuellen Quelltext:

    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {

    int

    OpenFileDialog ^ openFileDialog1 = gcnew OpenFileDialog();
    openFileDialog1->Filter = "MP3 Dateien |.mp3|Wave Dateien|.wave|OGG Dateien|.ogg|Alle Dateien (.)|.*"; //legt Auswahlfilter an , mit welchem nur bestimmte Dateitypen geladen werden

    if (openFileDialog1->ShowDialog() == DialogResult) //öffnet den Dialog zur Auswahl von Dateien
    {
    for (int i=0; i<openFileDialog1->FileNames->GetType)
    {

    }
    }

    }

    Ich komm gerad gar net mehr weiter



  • Args, du nutzt CLI. 😮
    Falsches Forum, da kann ich nur schieben. 🙄



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • if (openFileDialog1->ShowDialog() == DialogResult) //öffnet den Dialog zur Auswahl von Dateien 
    { 
    for (int i=0; i<openFileDialog1->FileNames->GetType) 
    { 
    
    } 
    } 
    
    }
    

    Ich komm gerad gar net mehr weiter

    Ich auch nicht, aber wirf mal nen Blick in die Fehlermeldungen des Compilers.
    Der Quellcode ist unsinn.



  • Ja ich weiss.Bis zu der If-Anweisung funktioniert es aber wunderbar.Alle danach ist Mist.Habs inzwischen auch wieder gelöscht.



  • Du musst aus DialogResult auch das entsprechende Element angeben, auf das verglichen werden soll. DialogResult ist nämlich ein Enum.

    Die for-Schleife wird so auf jeden Fall nicht erreicht, geschweigen denn das sie funktioniert (da müsste der Compiler schon Fehler werfen). Sieh dir Mal die MSDN-Hilfe zu OpenFileDialog an und guck dir die Beispiele an.



  • Also ich kann verkünden das ich die Lösung habe.Wer will kann die Lösung mal haben.Jetzt hab ich mal ne andere Frage.Kann es sein das Visual C++ 2005 kein Mp3 unterstützt sondern nur wave Dateien.Er spielt nämlich nur wave ab.Gibt es dafür ne Lösung?????

    Hier die Lösung:

    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {
    OpenFileDialog ^ openFileDialog1 = gcnew OpenFileDialog();
    openFileDialog1->Filter = "MP3 Dateien |.mp3|Wave Dateien|.wave|OGG Dateien|.ogg|Alle Dateien (.)|.*"; //legt Auswahlfilter an , mit welchem nur bestimmte Dateitypen geladen werden

    if (openFileDialog1->ShowDialog() == DialogResult); //öffnet den Dialog zur Auswahl von Dateien
    listBox1->Items->Add(openFileDialog1->FileName->ToString()); //fügt ein String (Zeichenkette) in die listbox1 ein
    }



  • if (openFileDialog1->ShowDialog() == DialogResult); //öffnet den Dialog zur Auswahl von Dateien
    

    Das solltest Du Dir noch mal ansehen.



  • Warum???? 😕



  • a) das ; am ende der if sorgt dafür, das der Block darunter IMMER ausgeführt wird.

    b) DialogResult wird so wie Du es aufführst mit dem Wert der Form getestet. (Die Form hat einen Member der so heißt). Das Ergebnis wird vermutlich nicht das gewünschte sein. Sobald das ; am ende der if weg ist, wird der Block in abhängigkeit des Wertes DialogResult von der Form verwendet.

    Es sollte vermutlich heissen:

    if (openFileDialog1->ShowDialog() == Forms::DialogResult::OK)
    


  • Zu erstens:

    Ja das hast du recht.Hab mich au gerad gewundert warum es net geht*G*Habs bereits wieder weggemacht.

    Zu zweitens:

    Wenn ich die Syntax ::OK anhänge bekomm ich eine Fehlermeldung des Compilers.


Log in to reply