Von Header aus, MFC ansprechen.

mafioso

Mitglied
Hab mehrere Header Dateien in eine MFC Anwendung includet und nun möchte ich über diese Header die Applikation ansprechen. Es geht um ein Poker programm, Oberfläche ist MFC, header sind in C/ C++, bis jetzt alles erfolglos ich kann nicht mal die Kartenanzeige ändern.

Das ist ein Ausschnitt aus der Form1.h, wie kann ich aus anderen .h zugreifen? z.b. Label Anzeige ändern usw. Habs schon mit "using namespace Poker", "Poker::Form1::Label..." versucht, klappt alles nicht. Kann jemand helfen? Das meiste in dem Ausschnitt ist mit dem MFC Designer gemacht, vllt. kann ich da was löschen, blick da nicht wirklich durch. Danke im Voraus!
Code:
namespace Poker {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
int wert;

	/// <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();
			
  geldaufteilung_beim_start();

  spieler[0].dealer = 1;
  spieler[0].aktiv = 1;
  small_blind = 50;
  big_blind = 100;
  vaktion.ist_raised = 0;
  vaktion.soll_raise = big_blind;

  runden_anfang();

			System::String^ guthaben;

			guthaben = spieler[0].geld.ToString();
			lbl_guthaben->Text = guthaben;

			guthaben = spieler[1].geld.ToString();
			lbl_cpu1->Text=guthaben;
			
			guthaben = spieler[2].geld.ToString();
			lbl_cpu2->Text=guthaben;
			
			guthaben = spieler[3].geld.ToString();
			lbl_cpu3->Text=guthaben;

			guthaben = tisch.pot.ToString();
			lbl_pot->Text=guthaben;

			//weiter();
		//TODO: Ablauf integrieren


			//
			//TODO: Konstruktorcode hier hinzufügen.
			//
		}

	protected:
		/// <summary>
		/// Verwendete Ressourcen bereinigen.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  btn_raise;
	protected: 
	private: System::Windows::Forms::Button^  btn_check;
	private: System::Windows::Forms::Button^  btn_call;
	private: System::Windows::Forms::Button^  btn_fold;
	private: System::Windows::Forms::Label^  lbl_guthaben;
	private: System::Windows::Forms::Label^  label2;
	private: System::Windows::Forms::Label^  label1;
	private: System::Windows::Forms::Label^  lbl_pot;
	private: System::Windows::Forms::Label^  lbl;
	private: System::Windows::Forms::Label^  lbl_cpu1;
	private: System::Windows::Forms::Label^  lbl_cpu2;
	private: System::Windows::Forms::Label^  label5;
	private: System::Windows::Forms::Label^  lbl_cpu3;
	private: System::Windows::Forms::Label^  label3;
	private: System::Windows::Forms::Label^  label4;
	private: System::Windows::Forms::Label^  lbl_round;
	private: System::Windows::Forms::TrackBar^  trackBar1;
	private: System::Windows::Forms::TextBox^  txt_gebot;
	private: System::Windows::Forms::Label^  label6;



	private:
		/// <summary>
		/// Erforderliche Designervariable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
.
.
.
 
Hi.
Hab mehrere Header Dateien in eine MFC Anwendung includet
Wieso MFC? Das ist doch alles .NET in C++/CLI.
und nun möchte ich über diese Header die Applikation ansprechen. Es geht um ein Poker programm, Oberfläche ist MFC, header sind in C/ C++, bis jetzt alles erfolglos ich kann nicht mal die Kartenanzeige ändern.

Das ist ein Ausschnitt aus der Form1.h, wie kann ich aus anderen .h zugreifen? z.b. Label Anzeige ändern usw. Habs schon mit "using namespace Poker", "Poker::Form1::Label..." versucht, klappt alles nicht.
Fehlermeldungen? :rolleyes:

Label ist übrigens ein Typ (der ganz woanders definiert ist). Darauf kannst du nicht zugreifen.

Auf private Eigenschaften einer Klasse kannst du auch (aus gutem Grund) nicht von außen zugreifen.

Wenn du auf eine private Eigenschaft zugreifen willst, dann mußt du eine öffentliche Methode zum Zugriff schreiben:
C++:
public ref class Form1 {
private: 
    Label^ anzeige;
public:
    void setAnzeige(String^ text) {
      anzeige->Text = text;
    }
};
Gruß
 
gemacht.
Code:
public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		 
		void setKartenBilder()
		{
			pic_player3_2->Text = "lol";

		}
		Form1(void)
		{
			InitializeComponent();			
			geldaufteilung_beim_start();
.
.
.

wie greif ich jetzt auf die funkt. setKartenBilder aus einer anderen Header zu?
Code:
Poker::Form1::setKartenBilder(); //laut intellisense erkennung
geht net: 'Poker' keine Klasse oder Namespace . "setKartenBilder": Bezeichner wurde nicht gefunden.
 
gemacht.
Code:
public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		 
		void setKartenBilder()
		{
			pic_player3_2->Text = "lol";

		}
		Form1(void)
		{
			InitializeComponent();			
			geldaufteilung_beim_start();
.
.
.

wie greif ich jetzt auf die funkt. setKartenBilder aus einer anderen Header zu?
Code:
Poker::Form1::setKartenBilder(); //laut intellisense erkennung
geht net: 'Poker' keine Klasse oder Namespace . "setKartenBilder": Bezeichner wurde nicht gefunden.
Dann machst du was falsch. ;-] Mehr kann man aus deinem bisschen Code nicht sagen.

Wie sieht die andere Headerdatei aus?

Gruß
 
Code:
#pragma once
void Runde1();
void Runde2();
void Runde3();
void Runde4();
void karten_anzeigen();

void UpdatePics();

void UpdatePics()
{
	

	Poker::Form1::setKartenBilder();
}

so versuche ich es aufzurufen. Ich kann dir das gesammte Visual studio projekt per email schicken, wenn du willst. Ich muss nur wissen wie ich drauf zugreifen kann, das klappt halt nicht.
 
Also, aus Headern die App ansprechen, aus dem Satz werd ich zwar nicht ganz schlau, aber
...denk was problem ist...
wenn du in einer a.cpp zB b.h und c.h inkludierst,
kannst du in der b.h (in Funktionen etc davon) NICHT einfach so auf Sachen der c.h zugreifen.

pragma once hast du eh drinnen (hoffentlich in jeder h), dann kannst du in die header c.h
include b.h und umgekehrt schreiben

soweit ich weiss kommt vc damit schon zurecht

gruß
 
ich weiß einfach nicht wie ich Labels ansprechen und ihnen kartenbilder zuweisen kann. Dieses pragma once ist nicht in jeder header, die header funktionieren alle untereinander. Es war so, wir haben in der Schule zunächst eine consolenanwendung geschreiben, diese besteht aus mehreren headern. Diese anwendung soll nun in eine Oberfläche implementiert werden(alle printf´s raus etc.). Die Oberfläche hat ein Kollege gemacht und nun versuch ich das ganze zu implementieren, was so nicht klappt, weil die Konsolenanwendung die Oberfläche steuern soll und nicht umgekehrt. Ich habe eine Form1.h (Oberfläche), und Haufen andere Header. Nun schaff ichs nicht aus diesen Headern irgendeine Funktion der Form1.h auszuführen.
 
Code:
#pragma once
void Runde1();
void Runde2();
void Runde3();
void Runde4();
void karten_anzeigen();

void UpdatePics();

void UpdatePics()
{
	

	Poker::Form1::setKartenBilder();
}

so versuche ich es aufzurufen.
Das kann so nicht funktionieren. Du solltest dir mal ein Buch zum Einstieg in die Programmierung mit C++ besorgen.

Du brauchst erstmal eine Instanz der Klasse:
C++:
Poker::Form1^ aForm1 = gcnew Poker::Form1;

aForm1->setKartenBilder();
Gruß
 
man ich verzweifle, geht nicht, ich krieg 7 Fehler wenn ich es so mach wie du es sagst. Der erkennt Poker nicht als Namespace. Irgendwas ist da falsch. Aus der Poker.cpp (dort ist die main) und natürlich in der form1 selbst, kann ich alles machen, aber nicht aus den headern raus.
 
Ist das der gesamte Code aus der Datei den du da gepostet hast?

Wo bindest du denn die Form1.h Datei ein?

Gruß

\edit: Da du anscheinend meinen subtilen Hinweis nicht verstanden hast: Wie lauten die Fehlermeldungen genau. Warum kopierst du die nicht einfach?
 
Zurück