Fragen bzgl. MS Visual C++ - Anfängerfragen



  • Ja sicherlich kannst Du aus der cpp Datei auf die eingetragenen Werte einer Textbox zugreifen.

    Was hast Du genau vor?

    Gib mal bitte mehr Info.

    Gruß,

    Doug_HH



  • nihao_ schrieb:

    Aber warum geht das nur in der cpp datei und nicht in der Headerdatei?

    Geht nicht:

    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    				 	FILE *pFile = fopen("C:\\test.txt","a+");
    			 }
    	};
    }
    

    evt. weil ein #include fehlt - oder der Namespac enicht passt ... was mich in meinem Verdacht bestärkt...

    Kann ich irgendwie aus der CPP Datei auf die eingetragenen Werte einer Textbox zugreifen?

    ...das Dir Grundlagen für C++ fehlen

    außerdem solltest Du Dir einig werden ob Du C++ (fopen) oder C++/CLI (der Rest Deines Codes) machen willst ... wenn Du C++/CLI verwenden willst, dann schau mal unter System::IO nach den Streams um Dateien zu öffnen - ist wesentlich einfacher

    ansonsten

    String ^ mytext = TextBox1->Text;
    

    hand, mogel



  • Also ich poste jetzt mal den ganzen Standard-Code des Projekts:

    Form1.h

    #pragma once
    
    namespace tagnacht {
    
    	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::Button^  button1;
    	public: System::Windows::Forms::CheckBox^  checkBox1;
    	protected: 
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #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->button1 = (gcnew System::Windows::Forms::Button());
    			this->checkBox1 = (gcnew System::Windows::Forms::CheckBox());
    			this->SuspendLayout();
    			// 
    			// button1
    			// 
    			this->button1->Location = System::Drawing::Point(61, 49);
    			this->button1->Name = L"button1";
    			this->button1->Size = System::Drawing::Size(75, 23);
    			this->button1->TabIndex = 0;
    			this->button1->Text = L"button1";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    			// 
    			// checkBox1
    			// 
    			this->checkBox1->AutoSize = true;
    			this->checkBox1->Location = System::Drawing::Point(36, 13);
    			this->checkBox1->Name = L"checkBox1";
    			this->checkBox1->Size = System::Drawing::Size(80, 17);
    			this->checkBox1->TabIndex = 1;
    			this->checkBox1->Text = L"checkBox1";
    			this->checkBox1->UseVisualStyleBackColor = true;
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(191, 84);
    			this->Controls->Add(this->checkBox1);
    			this->Controls->Add(this->button1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 }
    	};
    }
    

    tagnacht.cpp

    // tagnacht.cpp: Hauptprojektdatei.
    #define _CRT_SECURE_NO_WARNINGS
    #include "stdafx.h"
    #include "Form1.h"
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    using namespace tagnacht;
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	// Hauptfenster erstellen und ausführen
    	Application::Run(gcnew Form1());
    
            // HIER MOECHTE ICH AUF DEN INHALT DER FORM ZUGREIFEN ABER WIE?
    
    	return 0;
    }
    


  • Form1^ frm = gcnew Form1();
    Application::Run(frm);
    // HIER ANNST DU ZUGREIFEN, WIE DU LUST HAST!
    // from->...
    


  • Bin am verzweifeln, warum geht das nicht:
    Form1.checkBox1->Checked = true;

    Muss nicht erst ein Objekt der Klasse gemacht werden um drauf zuzugreifen?



  • nihao_ schrieb:

    Bin am verzweifeln, warum geht das nicht:

    weil Du Dir noch immer kein Buch mit Grundlagen für C++ genommen hast

    Form1.checkBox1->Checked = true;
    

    der Code könnte aus VB.NET und dem My-Namespace umgesetzt worden sein

    Muss nicht erst ein Objekt der Klasse gemacht werden um drauf zuzugreifen?

    ja - Jochen hat Dir das auch schon gepostet

    Form1^ frm = gcnew Form1();
    Application::Run(frm);
    // HIER ANNST DU ZUGREIFEN, WIE DU LUST HAST!
    // form->...
    

    ich habe mal den Tippfehler gleich entfern - evt. hilft Dir das

    hand, mogel



  • Form1^ frm = gcnew Form1();
    	Application::Run(frm);
    	frm->checkBox1->Checked = true;
    

    Und warum ist dann nicht die CheckBox checked wenn ich das mache?



  • nihao_ schrieb:

    Form1^ frm = gcnew Form1();
    	Application::Run(frm);
    	frm->checkBox1->Checked = true;
    

    Und warum ist dann nicht die CheckBox checked wenn ich das mache?

    Weil Du erst dann aus Run(..) rauskommst, wenn deine Form geschlossen wird.

    Ich nehme an, Du möchtest die CheckBox als Default setzen.
    Dazu: Verschiebe deinen Code in die Form und zwar in die InitializeComponents(..) Methode.

    Simon



  • Nein also ich wollte fopen() benutzen anstatt System::IO::File::Create(),
    aber irgendwie geht dass nur in der cpp und nicht in der Form.h



  • Aha. Und was ist der Grund fopen() den .NET IO Funktionen vorzuziehen?
    Simon



  • Weiß nicht, weil es halt naja ich sage mal "neu" ist und ich eig. nur "reines C++" schreiben wollte



  • nihao_ schrieb:

    Weiß nicht, weil es halt naja ich sage mal "neu" ist und ich eig. nur "reines C++" schreiben wollte

    fopen ist aber "C" und nicht "C++" oder "C++/CLI" ... am besten ist Du entscheidest Dich erstmal für eine der 3 Sprachen 😉



  • Wie kann ich jetzt z.B. einen Socket mit TCP aufmachen und nen GET Request absetzen?



  • Namensraum System::Net...
    http://msdn.microsoft.com/en-us/library/system.net.aspx
    Dann z.B. mit dem WebRequest

    Entscheide dich für eine Programmiersprache, besonders als Anfänger!
    Und BTW: C++/CLI und was das mit sich bringt ist meiner Meinung nach nicht für Anfänger geeignet.

    Simon



  • theta schrieb:

    Namensraum System::Net...
    http://msdn.microsoft.com/en-us/library/system.net.aspx
    Dann z.B. mit dem WebRequest

    Entscheide dich für eine Programmiersprache, besonders als Anfänger!
    Und BTW: C++/CLI und was das mit sich bringt ist meiner Meinung nach nicht für Anfänger geeignet.

    außer man ist Fan von verknoteten Gehirnwindungen 🙂



  • Ok also danke. 🙂

    Aber eine Frage hab ich noch, und zwar:
    Warum um alles in der Welt macht der nen Namespace anstatt einfach eine normale Klasse?



  • wie, anstatt...???



  • Der macht ja in einen namespace die Klasse... aber warum braucht man den namespace?



  • Hallo,

    ein Namensraum ist ein allgemeines Konzept, deshalb ist das hier:

    http://en.wikipedia.org/wiki/Namespace

    auch auf andere Programmiersprachen übertragbar, die das unterstützen.

    MfG,

    Probe-Nutzer



  • Ok danke 🙂


Anmelden zum Antworten