Listbox dateinamen auflisten



  • Hallo!

    Über einen Buttonklick öffne ich den Dialog um Bilder von der Platte zu laden.
    Die Bilder werden geladen und über die Listbox kann ich dann auf irgendwas klicken, damit sich das Bild in der PictureBox ändert.
    In der ListBox sehe ich aber nichts, ich klicke dort quasi blind.

    Was muß ich machen, damit in der ListBox die Dateinamen der Bilder angezeigt werden, oder überhaupt eine Auswahlliste kommt?

    private: System::Void listBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 if(listBox1->SelectedIndex!=-1)
    			 {
    				 pictureBox1->ImageLocation=openFileDialog1->FileNames[listBox1->SelectedIndex];
    			 }
    		 }
    

    Danke, Chris



  • Wie weist du deiner ListBox die Items zu?
    sollte mit ListBox->Items->AddRange(openFileDialog1->FileNames) so funktionieren...



  • Hallo!

    Gute Frage.
    Laut unserem Dozenten, sollte es so funktionieren.
    Bei einigen gehts auch.

    Hier mal der komplette Code.

    #pragma once
    
    namespace Listbox {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::ListBox^  listBox1;
    	private: System::Windows::Forms::Button^  button1;
    	private: System::Windows::Forms::PictureBox^  pictureBox1;
    	private: System::Windows::Forms::OpenFileDialog^  openFileDialog1;
    	private: System::Windows::Forms::Button^  button2;
    
    	private: System::ComponentModel::IContainer^  components;
    	protected: 
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->listBox1 = (gcnew System::Windows::Forms::ListBox());
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
    			this->openFileDialog1 = (gcnew System::Windows::Forms::OpenFileDialog());
    			this->button2 = (gcnew System::Windows::Forms::Button());
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->BeginInit();
    			this->SuspendLayout();
    			// 
    			// listBox1
    			// 
    			this->listBox1->Cursor = System::Windows::Forms::Cursors::Default;
    			this->listBox1->ForeColor = System::Drawing::Color::Red;
    			this->listBox1->FormattingEnabled = true;
    			this->listBox1->HorizontalScrollbar = true;
    			this->listBox1->IntegralHeight = false;
    			this->listBox1->Location = System::Drawing::Point(13, 13);
    			this->listBox1->Name = L"listBox1";
    			this->listBox1->Size = System::Drawing::Size(120, 212);
    			this->listBox1->TabIndex = 0;
    			this->listBox1->TabStop = false;
    			this->listBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::listBox1_SelectedIndexChanged);
    			// 
    			// button1
    			// 
    			this->button1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
    				static_cast<System::Byte>(0)));
    			this->button1->Location = System::Drawing::Point(13, 239);
    			this->button1->Name = L"button1";
    			this->button1->Size = System::Drawing::Size(120, 23);
    			this->button1->TabIndex = 1;
    			this->button1->Text = L"Bilder laden";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    			// 
    			// pictureBox1
    			// 
    			this->pictureBox1->Location = System::Drawing::Point(157, 13);
    			this->pictureBox1->Name = L"pictureBox1";
    			this->pictureBox1->Size = System::Drawing::Size(236, 249);
    			this->pictureBox1->TabIndex = 2;
    			this->pictureBox1->TabStop = false;
    			// 
    			// openFileDialog1
    			// 
    			this->openFileDialog1->FileName = L"openFileDialog1";
    			this->openFileDialog1->Filter = L"Bilder (*.jpg;*.bmp)|*.jpg;*.bmp";
    			this->openFileDialog1->Multiselect = true;
    			this->openFileDialog1->Title = L"Bilder wählen";
    			// 
    			// button2
    			// 
    			this->button2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
    				static_cast<System::Byte>(0)));
    			this->button2->Location = System::Drawing::Point(295, 292);
    			this->button2->Name = L"button2";
    			this->button2->Size = System::Drawing::Size(98, 26);
    			this->button2->TabIndex = 3;
    			this->button2->Text = L"Beenden";
    			this->button2->UseVisualStyleBackColor = true;
    			this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(405, 330);
    			this->Controls->Add(this->button2);
    			this->Controls->Add(this->pictureBox1);
    			this->Controls->Add(this->button1);
    			this->Controls->Add(this->listBox1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->EndInit();
    			this->ResumeLayout(false);
    
    		}
    #pragma endregion
    
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 if(System::Windows::Forms::DialogResult::OK==openFileDialog1->ShowDialog())
    				 {
    					 pictureBox1->Image=nullptr;
    					 listBox1->BeginUpdate();
    					 listBox1->Items->Clear();
    					 for each (String^s in openFileDialog1->FileNames)
    					 {
    						 String^ name=s->Substring(s->LastIndexOf("\\")+1);
    						 listBox1->Items->Add(name);
    					 }
    				 }
    			 }
    
    private: System::Void listBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 if(listBox1->SelectedIndex !=-1)
    			 {
    				 pictureBox1->ImageLocation=openFileDialog1->FileNames[listBox1->SelectedIndex];
    			 }
    
    		 }
    
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 this->Close();
    		 }
    };
    }
    


  • Moin,

    irgendwo steht ein

    listBox1->BeginUpdate();
    

    dann muss aber noch ein

    listBox1->EndUpdate();
    

    folgen ... ggf. nimmst Du einfach das BeginUpdate() raus

    ansonsten ist das Programm in einem inkonsitenten Zustand

    for each (String^s in openFileDialog1->FileNames)
                         {
                             String^ name=s->Substring(s->LastIndexOf("\\")+1);
                             listBox1->Items->Add(name);
                         }
    

    die Namen werden hier zwar schön eingefügt ... aber

    pictureBox1->ImageLocation=openFileDialog1->FileNames[listBox1->SelectedIndex];
    

    hier wird auf etwas zugegriffen was ggf. nicht mehr existiert ... ich konnte nichts in der MSDN finden was den Zustand des Arrays beschreibt nachdem jemand auf Abbrechen gedrückt hat ... sprich sind die alten Werte noch drinnen oder ist das Array leer ... im letzteren Fall stirbt das Programm

    hand, mogel



  • Hallo!

    Vielen Dank!

    Ich habe das

    listBox1->BeginUpdate();
    

    auskommentiert und nun geht es.
    Den Rest habe ich leider nicht verstanden.

    Gruß, Chris



  • guude,

    sorry das ich hier so einfach ein neue frage stelle, aber das problem ist ja geloest.

    ich bin etwas verwirtt, weil sich die "gesamte programm logik" praktisch in einem file abspielt. ist das typisch fuer .net ?

    gruss,
    buk



  • Hallo!

    Deine Frage können hier nur die Profis beantworten.

    Ich habe da aber noch eine andere Frage:

    Wie stelle ich ein,
    das die PictureBox Scrollbalken anzeigt,
    wenn das geladene Bild nicht in die Box passt?

    Danke, Chris



  • ich bin etwas verwirtt, weil sich die "gesamte programm logik" praktisch in einem file abspielt. ist das typisch fuer .net ?

    Nein, das ist nicht typisch.



  • Hallo!

    Wollte nochmal auf mein Problem aufmerksam machen.

    Gruß, Chris



  • theta schrieb:

    ich bin etwas verwirtt, weil sich die "gesamte programm logik" praktisch in einem file abspielt. ist das typisch fuer .net ?

    Nein, das ist nicht typisch.

    Doch, das ist Typisch... ich sehe aber gerade gar kein Problem... 😕



  • Jochen Kalmbach schrieb:

    theta schrieb:

    ich bin etwas verwirtt, weil sich die "gesamte programm logik" praktisch in einem file abspielt. ist das typisch fuer .net ?

    Nein, das ist nicht typisch.

    Doch, das ist Typisch... ich sehe aber gerade gar kein Problem... 😕

    Ist wohl def. Sache was "gesamt programm logik" beinhaltet, jedoch würde ich nicht die "gesamte programm logik" in ein File, geschweige denn in eine Klasse packen.

    Simon



  • Hallo!

    Verstehe ich jetzt nicht.

    Ist es nicht möglich bei der PictureBox Scrollbalken anzubringen?

    Danke, Chris



  • theta schrieb:

    Ist wohl def. Sache was "gesamt programm logik" beinhaltet, jedoch würde ich nicht die "gesamte programm logik" in ein File, geschweige denn in eine Klasse packen.

    Die Frage war doch , ob es in VS2008 C++/CLI (WinForms) typisch ist... und der Designer macht es nun mal so, also ist es typisch, oder?
    Es wurde ja nicht gefragt, ob es ausserhalb von WinForms (C++/CLI) typisch ist... oder geschweige denn gut...



  • Wenn mit "gesamt programm logik" gemeint ist, was der Designer erzeugt, ja, dann ist es wohl typisch. Ich hatte da keinen Zusammenhang zwischen "gesamt programm logik" und dem vom Designer generierten Code gesehen.
    Simon



  • Sorry... dann hatte ich es falsch verstanden...



  • Hallo!

    Irgendwie fühle ich mich hier übergangen! 😞 😕

    Chris



  • @chris47803: Siehe Doku...
    http://msdn.microsoft.com/de-de/library/system.windows.forms.picturebox_members.aspx
    => Nein. Du kannst die PicteBox z.B. in eine Panel einbauen und den SizeMode auf AutoSize setzen und die PictureBox im Panel auf Dock.Fill...

    Nochmals zum Code:
    Sagen wir mal so: In C/C++ lernt man, dass man Deklaration und Implementierung trennen sollte. Dies lässt sich aber in C++ z.B. bei Templates gar nicht realisieren. Wenn man mit "normalen" Klassen arbeitet ist es oft zwingend nötig, da man sonst gegenseitige Verweise nicht benutzen kann.

    In .NET (und hier mal die primäre Sprache C#) gibt es keine Header mehr. Das ganze Zeugs mit Headern ist nur eine Einschränkung von C/C++. In C# hat man es gleich so desinged, dass es ohne Header geht. Somit stellt sich da auch nicht mehr die Frage, wo man was hinschreiben soll.


Anmelden zum Antworten