0

2 つの異なる画像を含む 2 つの画像ボックスがあります。

1 つの画像ボックスをクリックすると、その中の画像がクリアされます。

さらに悪いことに、両方の画像ボックスには共通のイベント ハンドラが 1 つしかありません。どのピクチャーボックスがイベントを生成したかを知るにはどうすればよいですか? C++-CLI のソース コードをいただければ幸いです

関数内に何を書くべきかを知る必要があります:

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

}

編集: 問題は、sender を picurebox にキャストしようとすると、型を変換できないというエラーが表示されることです。

4

6 に答える 6

4

キャストの調子はどうですか?このようなほとんどの場合、次を使用します。

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

(ジョシュが私の参照の欠陥を指摘した後、私は上記のコードを修正したことに注意してください。ありがとう!)

動的キャストは、キャストできる場合は適切なオブジェクト型を提供し、キャストできない場合は null を提供します (C# の「as」に相当します)。

これで null 参照が返された場合、おそらく送信者はあなたが思っているものではありませんか?

于 2008-11-28T15:04:41.727 に答える
0

どのようにキャストしようとしていますか?私は一般的にdynamic_castorを使用します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
}

そこからはかなり簡単なはずです...

于 2008-12-12T05:58:52.067 に答える
0

送信者オブジェクトが実際にあなたが想定しているタイプであると確信していますか?

于 2008-11-27T15:14:44.760 に答える
0

Toji が提供したコードを試している場合は、問題があります。これを試してください。

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

マネージド ヒープ オブジェクトを示すために構文を必要としない C# とは異なり、C++\CLI では、スタック オブジェクト ( PictureBox pb)、ヒープ オブジェクトへのポインター ( PictureBox *pb)、およびマネージド ヒープ オブジェクトへのハンドル( ) が区別されますPictureBox ^pb。この 3 つは同じものではなく、寿命と用途が異なります。

于 2008-11-28T17:39:35.547 に答える
0

送信者オブジェクトを使用できます。それをピクチャ ボックス コントロールにキャストし、使用可能な 2 つのピクチャ ボックスと比較します。

私の Visual C++ は少し錆びていて、コードを提供できません。

于 2008-11-27T14:47:47.937 に答える
0

kgiannakakis, 問題は、sender を picurebox にキャストしようとすると、型を変換できないというエラーが表示されることです。

于 2008-11-27T14:50:46.087 に答える