2008-11-27 7 views
0

Есть два картинных окна с двумя разными изображениями.Обработка событий в Visual C++

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

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

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

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

} 

EDIT: Проблема заключается в том, что, когда я пытаюсь бросить отправителю picurebox, он дает ошибку говоря, что типы не могут быть преобразованы.

ответ

4

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

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

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

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

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

0

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

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

0

kgiannakakis, Проблема в том, что когда я пытаюсь отправить отправителя на picurebox, это дает ошибку, говоря, что типы не могут быть преобразованы.

+0

Не могли бы вы предоставить код, который вы используете? – kgiannakakis 2008-11-27 15:02:47

+0

PictureBox p = (PictureBox) отправитель; – Niyaz 2008-11-27 15:06:20

0

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

0

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

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

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

0

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

Это должно быть довольно прямо вперед, оттуда ...

Смежные вопросы