Ereignisbehandlung
-
Eine Ereignisbehandlung sieht ja folgendermaßen aus:
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); ... System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { //Ereignisbehandlung }
Jetzt möchte ich für eine in einer aus einer DLL stammenden statischen Methode erstellte Instanz eine Ereignisbehandlung machen, nur weiß ich nicht was "this" genau repräsentiert bzw. welche Instanz ich beim Erstellen der Eventhandler-Instanz als 1. Argument angeben soll.
Wem es hilft, hier der Code dazu:
static void Save(String ^ Save, String ^ DocumentName) { System::Windows::Forms::SaveFileDialog^ saveFileDialog1 = gcnew System::Windows::Forms::SaveFileDialog(); saveFileDialog1->FileOk += gcnew System::ComponentModel::CancelEventHandler(Instanz, &saveFileDialog1_FileOk); ... System::Void saveFileDialog1_FileOk(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) { //Ereignisbehandlung }
-
Warum static? Es gibt keinen Grund...
this ist ein Zeiger in einem Objekt der auf dieses Objekt zeigt.
this gibts natülich nur wenn ein Objekt existiert - kein Objekt > kein this.
z.B. gibts in statischen Methoden von Klassen KEIN this Zeiger.
-
static, darum, weil diese Klasse in einer dll verwenden möchte, und ich diese Methode ohne static nicht verwenden kann.
-
Taeli schrieb:
static, darum, weil diese Klasse in einer dll verwenden möchte, und ich diese Methode ohne static nicht verwenden kann.
Weshalb? Ist die Library ein .NET Assembly?
-
Ja, das soll eine .NET Assembly werden, und ohne das static kann ich die Methode nachher nicht benutzten. Ich hab jetzt einmal als 1.Argument eine neu erstellte Instanz der Klasse, in der die Methode deklariert hab angegeben. Fehler bekomme ich keine. Ich hoffe, dass das so klappt, wie ich mir das vorstelle und das Ereignis auch wirklich behandelt wird.
EDIT: Klappt!