Hilfe bei Realisierung eines Projektes



  • So, hier die Passage habe ich nun Form1 hinzugefügt:

    if(comboBox1->SelectedItem=="<Neu>")
    			 {
    				 Form2^ fenster;
    				 fenster = gcnew Form2();
    				 fenster->Show();
    
    			 }
    

    und Form2 beinhaltet lediglich die Textboxen 1-10 (1-5 Readonly =true | 6-10 Readonly = false) In diese soll man dann Daten eingeben soll. Mit einem OpenFileDialog soll man noch ein Bild auswählen. Doch wie ich das anstellen soll weiß ich noch nicht so ganz. Ich habe zwar den Code:

    OpenFileDialog ^ openFileDialog1 = gcnew OpenFileDialog(); 
                    openFileDialog1->InitialDirectory = "C:\\"; 
                    openFileDialog1->Filter = ""; 
                    openFileDialog1->Title = "Bild auswählen";
    

    Aber wie ich dann das ausgewählte Bild in die PictureBox in Form1 bekomme und alles zusammen gespeichert bekomme, ist mir noch ein Rätsel..
    Hier der komplette Code aus Form 2, falls der benötigt seinen sollte (ab prgma region Windows Form

    #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->Gericht = (gcnew System::Windows::Forms::TextBox());
    			this->textBox2 = (gcnew System::Windows::Forms::TextBox());
    			this->textBox3 = (gcnew System::Windows::Forms::TextBox());
    			this->textBox4 = (gcnew System::Windows::Forms::TextBox());
    			this->textBox5 = (gcnew System::Windows::Forms::TextBox());
    			this->textBox7 = (gcnew System::Windows::Forms::TextBox());
    			this->textBox8 = (gcnew System::Windows::Forms::TextBox());
    			this->textBox9 = (gcnew System::Windows::Forms::TextBox());
    			this->openFileDialog1 = (gcnew System::Windows::Forms::OpenFileDialog());
    			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// Gericht
    			// 
    			this->Gericht->BackColor = System::Drawing::SystemColors::Control;
    			this->Gericht->BorderStyle = System::Windows::Forms::BorderStyle::None;
    			this->Gericht->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 10));
    			this->Gericht->Location = System::Drawing::Point(12, 26);
    			this->Gericht->Multiline = true;
    			this->Gericht->Name = L"Gericht";
    			this->Gericht->Size = System::Drawing::Size(149, 20);
    			this->Gericht->TabIndex = 16;
    			this->Gericht->Text = L"Name:";
    			// 
    			// textBox2
    			// 
    			this->textBox2->BackColor = System::Drawing::SystemColors::Control;
    			this->textBox2->BorderStyle = System::Windows::Forms::BorderStyle::None;
    			this->textBox2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 10));
    			this->textBox2->Location = System::Drawing::Point(12, 88);
    			this->textBox2->Multiline = true;
    			this->textBox2->Name = L"textBox2";
    			this->textBox2->Size = System::Drawing::Size(149, 20);
    			this->textBox2->TabIndex = 18;
    			this->textBox2->Text = L"Zutaten";
    			// 
    			// textBox3
    			// 
    			this->textBox3->BackColor = System::Drawing::SystemColors::Control;
    			this->textBox3->BorderStyle = System::Windows::Forms::BorderStyle::None;
    			this->textBox3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 10));
    			this->textBox3->Location = System::Drawing::Point(12, 123);
    			this->textBox3->Multiline = true;
    			this->textBox3->Name = L"textBox3";
    			this->textBox3->Size = System::Drawing::Size(149, 20);
    			this->textBox3->TabIndex = 19;
    			this->textBox3->Text = L"Für: /Personen";
    			// 
    			// textBox4
    			// 
    			this->textBox4->BackColor = System::Drawing::SystemColors::Control;
    			this->textBox4->BorderStyle = System::Windows::Forms::BorderStyle::None;
    			this->textBox4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 10));
    			this->textBox4->Location = System::Drawing::Point(12, 149);
    			this->textBox4->Multiline = true;
    			this->textBox4->Name = L"textBox4";
    			this->textBox4->Size = System::Drawing::Size(149, 20);
    			this->textBox4->TabIndex = 20;
    			this->textBox4->Text = L"Zubereitung";
    			// 
    			// textBox5
    			// 
    			this->textBox5->Location = System::Drawing::Point(194, 26);
    			this->textBox5->Name = L"textBox5";
    			this->textBox5->Size = System::Drawing::Size(100, 20);
    			this->textBox5->TabIndex = 21;
    			// 
    			// textBox7
    			// 
    			this->textBox7->Location = System::Drawing::Point(194, 149);
    			this->textBox7->Name = L"textBox7";
    			this->textBox7->Size = System::Drawing::Size(100, 20);
    			this->textBox7->TabIndex = 23;
    			// 
    			// textBox8
    			// 
    			this->textBox8->Location = System::Drawing::Point(194, 123);
    			this->textBox8->Name = L"textBox8";
    			this->textBox8->Size = System::Drawing::Size(100, 20);
    			this->textBox8->TabIndex = 24;
    			this->textBox8->TextChanged += gcnew System::EventHandler(this, &Form2::textBox8_TextChanged);
    			// 
    			// textBox9
    			// 
    			this->textBox9->Location = System::Drawing::Point(194, 87);
    			this->textBox9->Name = L"textBox9";
    			this->textBox9->Size = System::Drawing::Size(100, 20);
    			this->textBox9->TabIndex = 25;
    			// 
    			// openFileDialog1
    			// 
    			this->openFileDialog1->FileName = L"openFileDialog1";
    			// 
    			// textBox1
    			// 
    			this->textBox1->BackColor = System::Drawing::SystemColors::Control;
    			this->textBox1->BorderStyle = System::Windows::Forms::BorderStyle::None;
    			this->textBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 10));
    			this->textBox1->Location = System::Drawing::Point(12, 62);
    			this->textBox1->Multiline = true;
    			this->textBox1->Name = L"textBox1";
    			this->textBox1->Size = System::Drawing::Size(149, 20);
    			this->textBox1->TabIndex = 17;
    			this->textBox1->Text = L"Bild Adresse:";
    			// 
    			// button1
    			// 
    			this->button1->Location = System::Drawing::Point(194, 59);
    			this->button1->Name = L"button1";
    			this->button1->Size = System::Drawing::Size(75, 23);
    			this->button1->TabIndex = 26;
    			this->button1->Text = L"Auswählen";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
    			// 
    			// Form2
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(665, 356);
    			this->Controls->Add(this->button1);
    			this->Controls->Add(this->textBox9);
    			this->Controls->Add(this->textBox8);
    			this->Controls->Add(this->textBox7);
    			this->Controls->Add(this->textBox5);
    			this->Controls->Add(this->textBox4);
    			this->Controls->Add(this->textBox3);
    			this->Controls->Add(this->textBox2);
    			this->Controls->Add(this->textBox1);
    			this->Controls->Add(this->Gericht);
    			this->Name = L"Form2";
    			this->Text = L"Form2";
    			this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void Form2_Load(System::Object^  sender, System::EventArgs^  e) {
    			 }
    	private: System::Void textBox8_TextChanged(System::Object^  sender, System::EventArgs^  e) {
    			 }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 OpenFileDialog ^ openFileDialog1 = gcnew OpenFileDialog(); 
                    openFileDialog1->InitialDirectory = "C:\\"; 
                    openFileDialog1->Filter = ""; 
                    openFileDialog1->Title = "Bild auswählen";
    		 }
    };
    }
    

    Liebe Grüße,



  • Hab jetzt einen anderen Weg versucht als den direkten Transfer welcher mir auch logischer erscheint.

    Ich habe nun diesen Code, welcher natürlich mal wieder mit etlichen Fehlern bestückt ist:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			  WritePrivateProfileString("common","EinPfad","c:\\lol\\","test.ini"); 
    WritePrivateProfileString("common","Nochwas","1","test.ini"); 
    WritePrivateProfileString("bla","test","0","test.ini");
    
    		 }
    

    Whats the matter?

    Fehleranalyse:

    1>c:\users\sebastian\desktop\cpp2\kochbuch64\Form2.h(228) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCWSTR' nicht möglich
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>c:\users\sebastian\desktop\cpp2\kochbuch64\Form2.h(229) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCWSTR' nicht möglich
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>c:\users\sebastian\desktop\cpp2\kochbuch64\Form2.h(230) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [4]' in 'LPCWSTR' nicht möglich
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>Code wird generiert...
    1>Das Buildprotokoll wurde unter "file://c:\Users\Sebastian\Desktop\cpp2\Kochbuch64\Debug\BuildLog.htm" gespeichert.
    1>Kochbuch64 - 6 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    




  • Done.

    Doch die .ini lässt sich nirgendwo auffinden... Seltsam?!

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 WritePrivateProfileString("Allgemein","Vorname","Udo","test3.ini"); 
    			 WritePrivateProfileString("Allgemein","Name","Schmidt","test3.ini"); 
    
    		 }
    


  • Du mischst native C++ und C++/CLI (managed)... nur als Hinweis - lies die Doku zu den API Funktionen.



  • Ach Leute ich weiß nicht wie ich es angehen soll...

    Wie würdet ihr es denn machen? Ich beschreibe euch mal meine Wunschlösung und mein Ziel.

    Das Programm ist ein Rezeptbuch. Ich möchte vom Nutzer neue Rezepte aufnehmen können, über das Eingabeformular Form2. 
    Da Form1 gewitzter Weise natürlich sofort die eingegebenen Daten empfängt und in eine "Vorlage"
    (Siehe weiter unten)  einfügt hat kann man dieses Rezept bei neustart bequem über die ComboBox1 aufrufen.
    

    Wie bekomme ich das hin?
    Einmal dachte ich an das speichern mit .ini Files. Problem: Ich müsste die Vorlage vorher einfügen & und das praktisch unendlich oft denn ich weiß ja nicht wie viele Rezepte der Benutzer hinzufügen will.

    Mein Zweiter Gedanke:
    Mit Datentransfers der Beiden Forms. Jetzt Mal excel-like erklärt.

    //Wenn Bei form 2 neues Rezept eingegeben -> Füge neues Grundmodell ein
    
    ( 
    
    if(comboBox1->SelectedItem=="" ) 
                { 
                    this->Gericht->Text = "";
    				this->Gericht->Refresh();
    
                    this->Gericht2->Text = "";
    				this->Gericht2->Refresh();
    
                    this->zutaten->Text = "";
    				this->zutaten->Refresh();
    
                    this->personen->Text = "";
    				this->personen->Refresh();
    
                    this->schwierigkeit->Text = "";
    				this->schwierigkeit->Refresh();
    
                    this->dauer->Text = "";
    				this->dauer->Refresh();
    
    				this->foto->Image = Image::FromFile ("");
    				this->foto->Refresh();
    
    )
    
    Und fülle es mit den gegebenen Daten und SPeichern.
    

    Wobei mir der Zweite Weg um 1000x Lieber wäre, da halt Problem von Weg1 nicht da wäre, FALS dieser verrückte Gedanke mit dieser Art von "Vorlage" realisierbar seien sollte.

    Bitte, bitte helft mir 🙄



  • Hat den keiner ne Idee?



  • Datenbank?
    Oder sonstige Struktur... z.B. pro Rezept eine Datei... die Dateien per XmlSerializer schreiben/lesen...



  • Ich trau mich schon fast gar nicht mehr nach dem Wie zu fragen -.-



  • Ach ja:

    if(comboBox1->SelectedItem=="Eier in Schinken Senf Soße" ) 
                { 
    				WritePrivateProfileString("Allgemein","Vorname", 
                                "Udsdgdsgsdgsdgsdgo","C:\\test.ini"); 
    				WritePrivateProfileString("Allgemein","Name", 
                                "Schmdfsdgsdgsdgidt","C:\\tdfgdest.ini");
    

    Der Kram geht zwar aber die .ini wird nirgends erstellt. Warum? Wenn ich im DEV-C++ einfach nur

    #include <windows.h> 
    
    int main() 
    {  
      WritePrivateProfileString("Allgemein","Vorname", 
                                "Udo","C:\\test.ini"); 
      WritePrivateProfileString("Allgemein","Name", 
                                "Schmidt","C:\\test.ini");   
      return 0; 
    }
    

    mache gehts, aber ne beim teueren VS2008 natürlich nicht?!



  • Die Datei wird vermutlich nicht erstellt, da Du keine Zugriffsrechte hast... und so lange Du keine Rückgabewerte auswertest, kanst Du nicht behaupten, dass es geht...

    Erstelle sie am besten in einem Verzeichnis wo Du schreiben kannst...

    String ^path = System::Environment::GetFolderPath(System::Environment::SpecialFolder::Personal);
    String ^fileName = System::IO::Path::Combine(path, "DateiName.txt");
    

    Und für den XmlSerializer siehe:
    http://lmgtfy.com/?q=XmlSerializer



  • ja das seltsame ist aber doch das der exakte code im DEC C++ geht, oder? Na Ich probiers mal aus. Danke dir 🙂

    Aber ich glaub hab schonmal versucht das aufn desktop zu schreiben und ging auch nciht, aber dann halt nochmal...

    Muss ich den Pfad so angeben

    C:\\Dektop\test.ini
    oder wie? Manche schrieben ua auch in diesem Forum man soll nicht den ganzen Pfad eingeben?!



  • Und wofür ist der Code?

    String ^path = System::Environment::GetFolderPath(System::Environment::SpecialFolder::Personal); 
    String ^fileName = System::IO::Path::Combine(path, "DateiName.txt");
    

    ? Soll ich den dazuschreiben, aber was will ich mit einer Txt, und allgemein würd ich lieber verstehen als einfach nur copy & paste, auch zu eurem Wohle, dann muss ich nicht so oft nerven 😉



  • Mein Rat:
    - Verwende entweder C# oder C/C++ aber *nicht* C++/CLI... das ist nicht für Anfänger gedacht!!!!



  • Ja, jetzt hab ich aber angefangen und das ist somit dast die letzte Hürde, und jetzt nochmal neu bei einer anderen Sprache anfangen wäre dumm... Heute ist mein A-Z Lexikon C++ gekommen, werde danach dann darauf umsteigen. Aber bitte helft mir doch nur noch ein mal 😞

    Und ne Noob-Frage: Mit C++, kann ma damit auch grafische oberflächen erstellen? Wenn ja muss dass doch wahnsinnig kompliziert sein, oder?



  • Mit C/C++ kann man alles machen. Die Komplexität ist manchmal aber nicht zu unterschäzen...



  • Malarkey. schrieb:

    Ja, jetzt hab ich aber angefangen und das ist somit dast die letzte Hürde, und jetzt nochmal neu bei einer anderen Sprache anfangen wäre dumm...

    Nein es wäre sinnvoll.

    Außerdem ist das Speichern der Rezepte nicht die "letzte Hürde". Dein Code ist total verhurt und absolut nicht dafür ausgelegt um so etwas zu realisieren.

    Musst Du dieses Programm schreiben oder warum willst Du einfach nicht verstehen, dass Dir ALLE Grundlagen fehlen um so etwas zu realisieren?

    Und da Du nur schnell schnell zum Ziel kommen willst rate ich Dir dringend von C++ (nicht nur von C++/CLI) ab.



  • Und wieso rätst du mir jetzt auch von C++ ab? O.o

    Jetzt gestern ist mein C++ Lexikon für 40 € reingeflattert und jetzt sagst du mir dass C++ scheiße ist, oder wie meinst du das? Wieso ist das nix für mich?

    Ja ich will schnell ans Ziel kommen weil ich eig gedacht hatte dieses WinForms wäre ne feine Sache aber dann hab ich gemerkt dass ich mit meinen zwar noch magern C++ kenntnissen so gut wie gar nix anrichten konnte... Also, soll ich jetzt doch kein C++ lernen? Ich dachte mir nur, gut wenn du erstmal C++ kannst, kriegste C# in zwei drei Wochen rein.... Oder liege ich da falsch?



  • Malarkey schrieb:

    Ich dachte mir nur, gut wenn du erstmal C++ kannst, kriegste C# in zwei drei Wochen rein.... Oder liege ich da falsch?

    Genau so ist es! Aber es sieht so aus als ob Du 52 Wochen, bis Du C++ kannst nicht warten willst...

    Deswegen würde ich lieber 8 Wochen für C# investieren...



  • Er sagte nicht C++ sei scheiße, er rät dir von C++/CLI ab. Denn wie dir bereits gesagt wurde ist das keine Sprache für Anfänger, allein Aufgrund der oftmals gemischten Sprachen...

    Was ich mich gerade frage... warum entwickelst du das ganze nicht im DEV C++? Erstens funktioniert dort wie du sagtest deine Speichermöglichkeit und zum 2. bist du dort auf der sicheren Seite dass du reines C++ verwendest. - Auch wenn Dev schon etwas in die Jahre gekommen ist.


Anmelden zum Antworten