2017-09-06 25 views
0

私はボタンの配列を持っており、それらのイベントハンドラを追加したいと思います。C++ CLIの配列からボタンにイベントハンドラを追加するには?

マイ配列:

array<Button^>^ buttons = gcnew array<Button^>(10);

があり、私は、イベントハンドラを追加しよう:それは私のためにi->Click += tasksButtons_Clickの誤差を与える

private: void tasksButtons_Click(System::Object^ sender, System::EventArgs^ e) { 
    MessageBox::Show("Lol"); 
} 
private: System::Void main_Load(System::Object^ sender, System::EventArgs^ e) { 
    int horizontal = 0, vertical = 0; 
    for each(Button^ i in buttons) { 
     i = gcnew Button(); 
     i->Text = "i"; 
     i->Width = 20; 
     i->Height = 20; 
     horizontal += 20; 
     i->Location = Point(horizontal, vertical); 
     this->Controls->Add(i); 
     i->Click += tasksButtons_Click; 
    } 
} 

。これの正しい構文は何ですか?

答えて

1

標準的な警告:アプリケーションの本体をC++/CLIで記述したり、WinFormsを使用してC++/CLIでGUIを記述することは可能ですが、推奨されません。 C++/CLIは相互運用シナリオを対象としています:C#やその他の.NetコードとアンマネージC++とのインタフェースが必要な場合、C++/CLIはこれらの間の変換を提供します。一次開発では、マネージコードが必要な場合はWinFormsまたはWPFでC#を使用するか、アンマネージを必要とする場合はMFCでC++を使用することをお勧めします。メソッドへのスタイルの参照、および

(唯一の非静的メソッドのために)上のメソッドを呼び出すためにオブジェクトを指定する -


はC++/CLIでは、C++を使用して、明示的にデリゲートのインスタンスを作成する必要があります

i->Click += gcnew EventHandler(this, &MyForm::tasksButtons_Click); 
//   ^^^^^^^^^^^^^^^^^^         instantiate explicitly 
//        ^^^^        specify the object to use 
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ C++-style reference 
関連する問題