Timespan auf Label in Form1 übertragen



  • Hallo zusammen,

    ich habe da mal ein Problem. Vor ungefähr zwei Wochen habe ich mit C++ zu programmieren angefangen. Dazu habe ich mir ein Einsteigerbuch in die Hand genommen und mit der mitgelieferten Software "Visual C++ 2008" Schritt für Schritt losgelegt. Soweit so gut. Sicherlich stehe ich noch ganz am Anfang, aber ds mit der Konsolenprogrammierung funktioniert schon recht gut.

    Aufgabe:

    Jetzt habe ich aber ein eigenes Projekt ins Leben gerufen, wofür ich aber eine Form1 benötige. Die Aufgabe des Programms ist es, die Zeit bis zu einem bestimmten Zeitpunkt zu errechnen und dann in der Form1 in einem Label darzustellen wie ein Countdown runter zu zählen. Das hat den Zweck, dass mein Kollege, der bald in Rente geht, seine Tage und Stunden mit zählen könnte.

    Ansich bekomme ich das in der Konsole ohne Probleme hin, di Werte auszurechnen. Dann habe ich dies auf die cpp Übertragen. Aber ich bekomme es einfach nicht hin, diese Werte über einen Timer auf ein Label zu bertragen...

    Habt ihr euch mit solch einer Thematik beschäftigt? Vielleicht ist mein Ansatz auch völlig falsch, es von der cpp über einen Timer auf ein Label zu versuchen...

    Dazu habe ich ein kleines Testprojekt eröffnet:

    Dies ist meine Zeit auf Label.cpp-Datei:

    // Zeit auf Label.cpp: Hauptprojektdatei.
    
    #include "stdafx.h"
    #include "Form1.h"
    
    using namespace ZeitaufLabel;
    
    [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());
    
    	//Zeitermittlung
    
    	DateTime zeit = DateTime::Now;
    	DateTime Gerd = DateTime(2016,8,31,15,00,00);
    	TimeSpan zeitRest = TimeSpan(Gerd.Ticks - zeit.Ticks);
    
    	return 0;
    
    }
    

    Dies ist meine Form1.h-Datei:

    #pragma once
    
    namespace ZeitaufLabel {
    
    	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::Label^  label1;
    	private: System::Windows::Forms::Timer^  timer1;
    	private: System::Windows::Forms::Label^  label2;
    	private: System::Windows::Forms::Label^  label3;
    	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->components = (gcnew System::ComponentModel::Container());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->label3 = (gcnew System::Windows::Forms::Label());
    			this->SuspendLayout();
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(30, 68);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(35, 13);
    			this->label1->TabIndex = 1;
    			this->label1->Text = L"label1";
    			this->label1->Click += gcnew System::EventHandler(this, &Form1::label1_Click);
    			// 
    			// timer1
    			// 
    			this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
    			// 
    			// label2
    			// 
    			this->label2->AutoSize = true;
    			this->label2->Location = System::Drawing::Point(29, 124);
    			this->label2->Name = L"label2";
    			this->label2->Size = System::Drawing::Size(35, 13);
    			this->label2->TabIndex = 2;
    			this->label2->Text = L"label2";
    			this->label2->Click += gcnew System::EventHandler(this, &Form1::label2_Click);
    			// 
    			// label3
    			// 
    			this->label3->AutoSize = true;
    			this->label3->Location = System::Drawing::Point(124, 116);
    			this->label3->Name = L"label3";
    			this->label3->Size = System::Drawing::Size(35, 13);
    			this->label3->TabIndex = 3;
    			this->label3->Text = L"label3";
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(284, 262);
    			this->Controls->Add(this->label3);
    			this->Controls->Add(this->label2);
    			this->Controls->Add(this->label1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				Timer^ _timer1 = gcnew Timer();
                    _timer1->Enabled::set(true);
                    _timer1->Interval::set(10);
                    _timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
    
    			 }
    
    	private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) 
    			 {
    
    			 }
    	private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				this->label1->Text::set(DateTime::Now.ToLongTimeString());
    				this->label2->Text::set(DateTime::Now.ToShortDateString());
    
    			 }
    
    	private: System::Void label2_Click(System::Object^  sender, System::EventArgs^  e) {
    			 }
    private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {
    		 }
    };
    }
    

    Frage in kurz: Wie bekomme ich den Wert "zeitRest" aus der cpp in die Form1 auf "label3"? (soll dabei wirklich zählen)

    Vielen Dank schonmal!

    Florian



  • Das ist kein C++, sondern ein Microsoft Derivat (CLI bzw. .NET), d.h. du bist entweder im falschen Forum oder du lernst die falsche Sprache.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) 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.



  • Taig3r schrieb:

    [...] "Visual C++ 2008" [...]

    Du bist Dir der aktuellen Jahreszahl bewußt und Dir kommt nichts spanisch vor?



  • So viel ändert sich da auch nichts. Die Basics gibt es weiterhin...

    Zum Einstieg reicht es schon.



  • Wie gesagt, du programmierst da kein ISO C++. Willst du wirklich GUIs in C++/CLI programmieren, musst du auch C++/CLI Basics lernen. Visual Studio 2008 ist wirklich schon recht alt, ich würde VS2015 empfehlen, das ist nämlich viel angenehmer zu benutzen und dessen Compiler unterstützt auch C++11 zu einem hohen Grad.



  • Taig3r schrieb:

    So viel ändert sich da auch nichts. Die Basics gibt es weiterhin...

    Die "Basics" lernst du so nicht.

    Code unter deinem Kommentar //Zeitermittlung in main() wird erst ausgeführt, wenn Application::Run() zurückkehrt, also erst, wenn dein Programm aufhört zu laufen.



  • Den Timer musst du mit Start starten.

    Ansonsten machts aber keinen Sinn, GUI Anwedungen (oder überhaupt irgendwas) mit C++/CLI zu entwickeln. Dieses System ist nur für ganz bestimmte Anwendungsfälle gedacht (Interop zwischen native und .NET), und sonst für gar nichts.



  • @ Swordfish

    "Code unter deinem Kommentar //Zeitermittlung in main() wird erst ausgeführt, wenn Application::Run() zurückkehrt, also erst, wenn dein Programm aufhört zu laufen."

    Danke! Hab ich erst mal die Positionen getauscht.



  • Allerdings bin ich wohl noch nicht fertig 😕

    Läuft noch nicht...


Anmelden zum Antworten