Frage

Es gibt zwei PictureBox mit zwei verschiedenen Bildern.

Wenn ich auf einem Bild Feld klicken, sollte das Bild in ihm gelöscht werden.

Um die Sache noch schlimmer zu machen, die beide die Bildfelder haben nur einen gemeinsamen Event-Handler. Wie kann ich wissen, welche picturebox das Ereignis generiert? Ich würde Quellcode in C ++ zu schätzen wissen - CLI

Ich muß wissen, was in der Funktion zu schreiben:

private: System::Void sqaure_Click(System::Object^  sender, System::EventArgs^  e) {

}

EDIT:. Das Problem ist, dass wenn ich versuche, Absender picurebox zu werfen, es einen Fehler gibt zu sagen, dass die Typen können nicht konvertiert werden

War es hilfreich?

Lösung

Wie geht es dir die Besetzung? In den meisten Fällen wie diesen würde ich verwenden:

PictureBox ^pb = safe_cast<PictureBox^>(sender);
if(pb != null) {
    // logic goes here
}

(Beachten Sie, dass ich den obigen Code korrigiert habe, nachdem Josh meine Referenz Fehler hingewiesen. Danke!)

die dynamische Umwandlung gibt Ihnen den richtigen Objekttyp, wenn sie werfen können, oder null, wenn es Überhöhung (es die equiv ist. Von „als“ in C #)

Wenn diese Sie nicht geben einen NULL-Verweis, dann vielleicht Ihre Absender nicht das, was Sie denken, es ist?

Andere Tipps

Sie können das Senderobjekt verwenden. Wirf ihn zu einem Bildfeld-Steuerelement und vergleichen Sie es mit den beiden verfügbaren Bildrahmen.

My Visual C ++ ist ein wenig rostig und kann nicht Code bietet jetzt.

GIANNAKAKIS, Das Problem ist, dass wenn ich versuche, Absender picturebox zu werfen, es einen Fehler gibt zu sagen, dass die Typen können nicht konvertiert werden.

Sind Sie sicher, dass das Senderobjekt eigentlich die Art ist, dass Sie annehmen, dass es sein?

Wenn Sie den Code sind, der erwiesenermaßen Toji gab, dann gibt es Sie sind Problem - versuchen Sie dies:

PictureBox ^pb = safe_cast<PictureBox^>(sender);

Im Gegensatz zu C #, wo Sie keine Syntax müssen verwalteten Heap-Objekte, C ++ \ CLI unterscheidet zwischen Stapelobjekten (PictureBox pb), Zeiger auf Heap-Objekte (PictureBox *pb) und Griffe zu verwalteten Heap-Objekte (PictureBox ^pb) bezeichnen. Die drei sind nicht die gleiche Sache, und haben unterschiedliche Lebensdauern und Gebräuche.

Wie versuchen Sie zu werfen? Ich würde im Allgemeinen verwenden dynamic_cast oder safe_cast:

PictureBox ^ pb = dynamic_cast<PictureBox^>(sender);
if (pb != nullptr)
{
...
}

oder

try
{
    PictureBox ^ pb = safe_cast<PictureBox^>(sender);
    ...
}
catch(InvalidCastException ^ exp)
{
    // Handle a cast that went awry
}

Es sollte schön sein geradlinig von dort ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top