- ベストアンサー
C++.NETのWindowsフォームで自作クラスを制御したい
- C++.NETでWindowsフォームアプリを作っています。状況をわかりやすくするために、例えを使って説明すると、Form.h起動時に、自作の「おにぎり」クラスのオブジェクトを1つ作成し、ボタン1をクリックしたときのイベントとして、「塩をふる」関数を実行し、ボタン2をクリックしたときのイベントとして、「のりをまく」関数を実行したいという要件があります。
- 自作のクラスとWindowsフォームのソースコードは単純に混在できないため、質問者はラッパークラスを作る必要があるのか疑問に感じています。別の情報では、クラスを宣言するときにポインタとして宣言し、.から->へ変えるだけでよいとされていますが、それは解釈の違いでしょうか。
- 現状では後者の方法で設定するとコンパイルは正常にできますが、イベント発生時に「塩をふる」関数内で例外が発生します。質問者はフォーム内のすべてのイベントが1つのオブジェクトに対して動作するケースを想定しており、アドバイスを求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 其の記事は、スタティックリンクライブラリ内にある非Netクラス(通常のC++クラス)をNet内で利用する為に、Netクラスで非Netクラスをラップする為の手段を紹介しているのだと思います。 御質問の事例は「おにぎり」クラスを含めて、全てをNet内で作成するのですから、以下で出来ると思います。参考程度に。 // //Onigiri.h // #pragma once ref class Onigiri { public: Onigiri() { } ~Onigiri() { } !Onigiri() { } System::Void ShiowoFuru() { System::Windows::Forms::MessageBox::Show("塩をふる"); } System::Void NoriwoMaku() { System::Windows::Forms::MessageBox::Show("のりをまく"); } }; // //Onigiri.h // // //Form1.h // #include"onigiri.h" namespace ??? { public ref class Form1 : public System::Windows::Form { public: // //省略 // private: Onigiri^ obj; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { this->obj = gcnew Onigiri(); } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { this->obj->ShiowoFuru(); } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { this->obj->NoriwoMaku(); } }: } // //Form1.h //