Listbox dateinamen auflisten
-
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.