Есть два бокса с двумя разными изображениями.
Если я щелкну по одному графическому блоку, изображение в нем должно очиститься.
Что еще хуже, оба графических окна имеют только один общий обработчик событий. Как я могу узнать, какой блок изображений сгенерировал событие? Буду признателен за исходный код на C++ - CLI
Мне нужно знать, что писать внутри функции:
private: System::Void sqaure_Click(System::Object^ sender, System::EventArgs^ e) {
}
Обновлено: проблема в том, что когда я пытаюсь передать отправителя в picurebox, появляется сообщение об ошибке, в котором говорится, что типы не могут быть преобразованы.





Вы можете использовать объект-отправитель. Преобразуйте его в элемент управления графическим блоком и сравните его с двумя доступными графическими блоками.
Мой Visual C++ немного заржавел и сейчас не может предоставить код.
Джаннакакис Проблема в том, что когда я пытаюсь передать отправителя в окно изображений, появляется сообщение об ошибке, в котором говорится, что типы не могут быть преобразованы.
Попробуйте: PictureBox ^ p = (PictureBox ^) отправитель;
Вы уверены, что объект-отправитель действительно того типа, которым вы его предполагаете?
Как у вас дела с актерским составом? В большинстве случаев я бы использовал:
PictureBox ^pb = safe_cast<PictureBox^>(sender);
if (pb != null) {
// logic goes here
}
(Обратите внимание, что я исправил приведенный выше код после того, как Джош указал на мою ошибку ссылки. Спасибо!)
динамическое приведение даст вам правильный тип объекта, если он может приводить, или null, если он не может (это эквивалент «as» в C#)
Если это дает вам нулевую ссылку, то, возможно, ваш отправитель не тот, что вы думаете?
Если вы пробуете код, который дал Тодзи, значит, у вас проблема - попробуйте следующее:
PictureBox ^pb = safe_cast<PictureBox^>(sender);
В отличие от C#, где не требуется никакого синтаксиса для обозначения объектов управляемой кучи, C++ \ CLI различает объекты стека (PictureBox pb), указатели на объекты кучи (PictureBox *pb) и дескрипторы для объектов управляемой кучи (PictureBox ^pb). Это не одно и то же, и у них разные времена жизни и разные способы использования.
О да. Спасибо за исправление. (Прошло немного времени с тех пор, как я сделал C++ \ CLI).
Как ты пытаешься кастовать? Я обычно использую dynamic_cast или safe_cast:
PictureBox ^ pb = dynamic_cast<PictureBox^>(sender);
if (pb != nullptr)
{
...
}
или же
try
{
PictureBox ^ pb = safe_cast<PictureBox^>(sender);
...
}
catch(InvalidCastException ^ exp)
{
// Handle a cast that went awry
}
Оттуда все должно быть довольно просто ...
PictureBox p = (PictureBox) отправитель;