Обработка событий в Visual C ++ - PullRequest
0 голосов
/ 27 ноября 2008

Есть две коробки с двумя разными изображениями.

Если я нажму на одну графическую рамку, изображение в ней должно быть очищено.

Что еще хуже, в обоих графических окнах есть только один общий обработчик событий. Как я могу узнать, какое изображение генерирует событие? Буду признателен за исходный код на C ++ - CLI

Мне нужно знать, что писать внутри функции:

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

}

РЕДАКТИРОВАТЬ: Проблема в том, что когда я пытаюсь привести отправителя к Picurebox, он выдает ошибку о том, что типы не могут быть преобразованы.

Ответы [ 6 ]

4 голосов
/ 28 ноября 2008

Как дела? В большинстве случаев, как это я бы использовал:

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

(Обратите внимание, что я исправил приведенный выше код после того, как Джош указал на мой недостаток ссылки. Спасибо!)

динамическое приведение даст вам правильный тип объекта, если оно может быть приведено, или null, если оно не может (это эквивалент «as» в C #)

Если это дает вам нулевую ссылку, то, возможно, ваш отправитель не тот, о ком вы думаете?

0 голосов
/ 12 декабря 2008

Как вы пытаетесь сыграть? Я бы обычно использовал 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
}

Оттуда все должно быть довольно просто ...

0 голосов
/ 28 ноября 2008

Если вы пробуете код, который дал Тодзи, значит, у вас проблемы - попробуйте это:

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

В отличие от C #, где вам не нужен синтаксис для обозначения объектов управляемой кучи, C ++ \ CLI различает объекты стека (PictureBox pb), указатели на объекты кучи (PictureBox *pb) и дескрипторы на объекты управляемой кучи ( PictureBox ^pb). Три не одно и то же и имеют разные времена жизни и использования.

0 голосов
/ 27 ноября 2008

Вы уверены, что объект отправителя на самом деле относится к тому типу, который вы предполагаете?

0 голосов
/ 27 ноября 2008

kgiannakakis, Проблема заключается в том, что при попытке привести отправителя к picurebox выдается сообщение о невозможности преобразования типов.

0 голосов
/ 27 ноября 2008

Вы можете использовать объект отправителя. Приведите его к элементу управления графическим блоком и сравните с двумя доступными графическими блоками.

Мой Visual C ++ немного заржавел и не может сейчас предоставить код.

...