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..:)


Log in to reply