2012-03-11 21 views
0

を使用しているとき、私は次のコードを持っているとVisual Studio C++は、2つのエラー報告:のVisual Studio C++/CLIの構文エラーの.Net Windowsフォーム

#include "windows.h" 

#using <mscorlib.dll> 

#using <System.dll> 

#using <System.Windows.Forms.dll> 

using namespace System::Windows::Forms; 

__gc class MyForm : public Form 

{ 

public: 

MyForm() 

{ 

    Text = "Hello, Windows Forms!"; 

    Button* button = new Button(); 

    button->Text = "Click Me!"; 

    button->Click += new EventHandler(this, button_click); 

    this->Controls->Add(button); 

} 

void button_click(Object* sender, EventArgs* e) 

{ 

MessageBox::Show("Ouch!"); 

} 

}; 

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 

{ 

Application::Run(new MyForm); 

} 

とエラー: エラーC2061構文エラー:イベントのArgs エラーをC2061構文エラー:EventHandler

コードを実行するにはどうすればよいですか? Thanxは事前に

+0

、 "C++" などのマネージC++のための質問をタグ付けしていません - それはまったく別の言語です。私が見ているのは、あなたが '名前空間システムを使う 'ことを忘れたことです。しかし、代わりにC++/CLI(またはC#)を使用することを実際に考慮する必要があります.Managed C++は廃止予定です。 –

+0

Windowsフォームには 'WinMain'は必要ありません。 'main'も使うことができます。 – ApprenticeHacker

+0

問題が見つかりました。編集を確認してください。 – ApprenticeHacker

答えて

0

「using namespace System;」という行を追加します。

としてbutton_clickする
using namespace System; 

変更参照:& MyFormを:: button_click

全作業コード:あなたのタグを変更

#include "windows.h" 

    #using <mscorlib.dll> 
    #using <System.dll> 
    #using <System.Windows.Forms.dll> 

    using namespace System::Windows::Forms; 
    using namespace System; 

    __gc class MyForm : public Form 
    { 

     public: 

     MyForm() 
     { 

      Text = "Hello, Windows Forms!"; 

      Button* button = new Button(); 
      button->Text = "Click Me!"; 

      button->Click += new EventHandler(this, &MyForm::button_click); 

      this->Controls->Add(button); 
     } 

     void button_click(Object* sender, EventArgs* e) 
     { 
      MessageBox::Show("Ouch!"); 
     } 

    }; 

    int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
    { 
     Application::Run(new MyForm); 
    } 
1

主な問題は、あなたが追加していないということのようだ:システムの両方で名前空間です

using namespace System; 

EventArgs以来とEventHandler、あなたはどちらか、としてそれらを宣言しなければなりません

new System::EventHandler() 
System::EventArgs* 
... 

または上記のusingステートメントを含めてください。

しかし、他にもいくつか問題があります。

  • まず、あなたはネイティブのWindows API関数を呼び出している場合にのみ必要とされているwindows.hを含める必要はありません。

  • 第2に、main機能が実行する管理されたC++のWindowsフォームにはWinMainは必要ありません。 WinMain

  • 第三に、なぜCALLBACK?、それは一般的にAPIENTRYまたはWINAPIが先行しています。

+0

'CALLBACK'、' APIENTRY'、 'WINAPI'マクロはすべて同じものに定義されているので、実際にはプログラムの動作には影響しません。しかし、はい、意味的には、他のものを使用することがより明確になります。 –

関連する問題