2008-11-27 27 views
0

有兩個圖片框和兩個不同的圖片。Visual C++中的事件處理

如果我點擊一個圖片框,它的圖像應該被清除。

爲了讓事情變得更糟,兩個圖片框只有一個公共事件處理程序。 我如何知道哪個picturebox生成事件?我將不勝感激的源代碼在C++ - CLI

我需要知道如何在函數中寫:

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

} 

編輯:問題是,當我嘗試投發件人picurebox,它給出了一個錯誤說這些類型不能轉換。

回答

4

你最近怎麼樣?在大多數情況下,這樣我會用:

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

(請注意,我已經糾正了上面的代碼喬希指出我的缺點參考後感謝!)

的動態轉換會給你正確的對象如果它可以投射,則爲null;如果它不可以,則爲null(它與C#中的「as」相同)

如果這確實會給你一個空引用,那麼也許你的發件人不是你認爲的那樣?

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

您確定sender對象實際上是您認爲它的類型嗎?

0

如果你想的是東治給了代碼,那麼就你的問題 - 試試這個:

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

不像C#,你不需要任何的語法來表示託管堆中的對象,C++ \ CLI區分堆棧對象(PictureBox pb),指向堆對象(PictureBox *pb)的指針以及託管堆對象(PictureBox ^pb)的句柄。三者不是一回事,而是有不同的生活時間和用法。

0

你是如何施放的?我一般會使用dynamic_castsafe_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 
} 

它應該是從那裏漂亮的直線前進...