delegatinstanz
-
ich hab den folgenden Quellquode :
// Tabelle.h #pragma once using namespace System; using namespace System::Windows::Forms; using namespace System::Drawing; namespace Tabelle { public ref class CTabelle : public System::Windows::Forms::Label { CTabelle(int AnzahlHori, int AnzahlVerti, int höhe, int breite); int Höhe; int Breite; int AnzahlHori; int AbzahlVerti; private: System::Void Tabelle_Paint(Object ^sender, PaintEventArgs ^e) { Pen ^p = gcnew Pen(Color::Black); e->Graphics->DrawRectangle(p, 1, 1, 10, 10); } }; }
// Tabelle.cpp #include "stdafx.h" #include "Tabelle.h" using namespace Tabelle; using namespace System::Collections::Generic; using namespace System::Windows::Forms; CTabelle::CTabelle(int AnzahlHori, int AnzahlVerti, int höhe, int breite) { List<Label ^> ^labelHori = gcnew List<Label ^>(); List<Label ^> ^labelVerti = gcnew List<Label ^>(); for(int Hori; Hori < AnzahlHori; Hori++) { Label ^neu = gcnew Label(); labelHori->Add(neu); } for(int Verti; Verti < AnzahlVerti; Verti++) { Label ^neu = gcnew Label(); labelVerti->Add(neu); } for each( Label ^elem in labelHori) { elem->Paint += PaintEventHandler(elem, &CTabelle::Tabelle_Paint); } for each( Label ^elem in labelVerti) { } }
un will für jedes label ein Rechteck zeichen(wie man ja sehen kann), aber wenn ich kompiliere kommt diese Meldung :
1>.\Tabelle.cpp(27) : error C3374: Adresse von "Tabelle::CTabelle::Tabelle_Paint" kann nur übernommen werden, wenn eine Delegatinstanz erstellt wird.
So meine Frage ist jetzt was ich falsch mache und was eine Delgatinstanz is/ wie ich eine erstell...??
-
Probiers mal so:
for each( Label ^elem in labelHori) { elem->Paint += gcnew PaintEventHandler(elem, &CTabelle::Tabelle_Paint); }
-
ja klingt logisch..aber jetzt sacht der Kompiler :
1>.\Tabelle.cpp(27) : error C3350: "System::Windows::Forms::PaintEventHandler": Ein Delegatkonstruktor erwartet 1 Argument(e).
obwohl die Funktion mit 2 paras überladen is.. des versteh ich irg wie nich^^
-
allerdings hab ich die Tabelle_Paint jetzt als static deklariert..
-
static: 1 Argument, nämlich den "Funktionspointer"
non- static: 2 Argumente, nämlich das konkrete Objekt und den "Funktionspointer"Simon
-
sry aber des versteh ich jetzt irgwie nich...wie kann man den einen Funktionpointer 1 mal static un 1 mal nich machn??
-
des problem hab ich jetzt gelöst...aber wenn ich jetzt eine neue Instanz dieser Klasse hinzufügen will(ist in einer dll) kommt die Fehler meldung :
c:\dokumente und einstellungen\legolas\eigene dateien\visual studio 2008\projects\test\Form1.h(33) : error C3767: "Tabelle::CTabelle::CTabelle": Auf mögliche Funktion(en) kann nicht zugegriffen werden.
-
Hallo,
vielleicht solltest du den Konstruktor public machen...
MfG,
Probe-Nutzer
-
ja hat geklappt danke..:)