[VC++ 2005] Probleme mit ClickEventHandler -.-

the incredible Leitman

Erfahrenes Mitglied
Hallo zusammen

Ich habe ein Control erstellt, dass aber nicht von WindowsControls erbt, also von Grund auf neu damit begonnen....
Nur mit dem EventHandling komme ich nicht so ganz voran....

Ich habe eine Form, die in einer for Schleife für jeden angeschlossenen Bildschirn ein TabControl added und diesem jeweils eine Anzahl TabPages gibt...
Klar soweit?

Jetzt soll, auf der zweiten Tab Page etwas anderes gezeichnet werden, als auf der dritten usw...

Momentan habe ich es so gelöst:
C++:
if (idx_tabPages == 1) // second TabPage
{
	// create Controls /*Strecke, 1.Teil*/ with information from Server
	this->m_tabPages[idx_tabPages]->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &ZLSClientApplication::tabPage_2_Paint);
}
if (idx_tabPages == 2) // third TabPage
{
	// create Controls /*Strecke, 2.Teil*/ with information from Server
	this->m_tabPages[idx_tabPages]->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &ZLSClientApplication::tabPage_3_Paint);
}
und für jede Page wird eine eigene Routinde aufgerufen:
C++:
void ZLSClient::ZLSClientApplication::tabPage_2_Paint (System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
{
	Graphics ^ g = e->Graphics;

	for each (ZLSControlRailsBaseClass ^rail in ctrlLeft)
	{
		rail->Paint(g);
	}
}

void ZLSClient::ZLSClientApplication::tabPage_3_Paint (System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
{
	Graphics ^ g = e->Graphics;

	for each (ZLSControlRailsBaseClass ^rail in ctrlRight)
	{
		rail->Paint(g);
	}
}
Zur Erklärung: ctrlLeft und ctrlRigth sind arrays aus CustomControls (ZLSControlRailsBaseClass)
Diese sollen auf der Tab Page gezeichnet werden

Genau so wie es jetzt ist, funktioniert es... aber ich frage mich ob das so die ideale Lösung ist?
Hab probiert, alles in eine Methode zu packen:
C++:
this->m_tabPages[idx_tabPages]->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &ZLSClientApplication::tabPage_i_Paint);

void ZLSClient::ZLSClientApplication::tabPage_i_Paint (System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
{
	Graphics ^ g = e->Graphics;

	System::Windows::Forms::TabPage ^page = (System::Windows::Forms::TabPage ^ )sender;

	if (page == m_tabPages[2])
	{
		for each (ZLSControlRailsBaseClass ^rail in ctrlLeft)
		{
			rail->Paint(g);
		}
	}
	if (page == m_tabPages[3])
	{
		for each (ZLSControlRailsBaseClass ^rail in ctrlRight)
		{
			rail->Paint(g);	
		}
	}
}
aber so funktioniert es nicht... dabei werden nur auf dem letzten Bildschirm die gewünschten Controls gezeichnet....
Ich versteh nicht warum ist die zweite Lösung nicht genau wie die erste?
Hoffe ihr könnt mir weiterhelfen,
was mache ich falsch, oder habe ich was vergessen?
 
Mal abgesehen von deinem Vorhaben was nicht ganz zu deinem Thread-Topic passt,
stellt sich mir grad die Frage wie Du Click-Events von lediglich gezeichneten Controls empfangen willst? :confused: ;)

Ich empfehle Dir die Controls auf jeder TabPage als separate Instanz hinzuzufügen.
Die Daten die diese Controls verändern oder augeben sollen, kannst vià Control.DataBindings bequem abfackeln...
 
Ja stimmt, Topic passt leider nicht, aber ich war in anderen Gedanken und es nachträglich nicht mehr ändern :( *schämemich*

Ja, das mit den Click Events, war auch nur so ein Zwischengedanke, da meine Controls sowohl als gezeichnete, als auch als Windows Controls verfügbar sind...wieso, hab ich das irgendwo erwähnt? Jetzt gings eigentlich nur um die Platzierung auf den Tab Pages!

Hier sollen die Controls auch gar nicht verändert sondern lediglich gezeichnet werden, was wenn ich es wie im ersten Beispiel beschrieben mache auch funktioniert,
aber sobald ich es versuche zu komprimieren um Code Duplikation zu vermeiden wie im 2. Codeausschnitt, wird lediglich im 4 Bildschim in den TabPages etwas gezeichnet...

Hat den Anschein, dass alles vorherige überschrieben wird und erst am Ende, das was halt überbleibt gezeichnet wird... ungefähr klar, was ich sagen will :confused: ?
 
Ich seh ehrlich gesagt keinen Fehler
Ja, ich auch nicht *lol* deshalb wunderts mich ja so... :D

hat scheinbar in der Art in der ich den sender vergleiche eine andere Arbeitsweise -.-

Danke dir (und wieder und wieder und wieder...) *gg*

Werd das aber mal auf Eis legen, an der Optimierung kann ich später auch noch herumbasteln :D
 

Neue Beiträge

Zurück