2012-03-28 24 views
0
private: System::Void btn_entrar_Click(System::Object^ sender, System::EventArgs^ e) { 

string btn_texto = txt_login->Text->ToString(); 
MessageBox(NULL, "Hello!", btn_texto.c_str(), MB_OK | MB_ICONEXCLAMATION); 

} 

通常、Visual C++ Studio 2008 ProfessionalでWindowsフォームアプリケーションを作成しています。デザインモード)ので、生成した関数の中にコードを書きました。 std :: < _Elem、_Traitsをのbasic_string」に 'システム::文字列^' から変換することはできません。Visual C++フォーム、単純なMessageBoxでエラーが発生し、テキストフィールドから文字列にテキストを割り当てます。

エラー1:

エラーC2440: '初期化'

は、それが2つのエラーが発生しました、_Ax>」

エラー2:

エラーC:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ winuser.h(7374) :int MessageBox(HWND、LPCTSTR、LPCTSTR、UINT)C2872: 'MessageBox':あいまいなシンボル1> '1>または
'は、C:\ WINDOWS \ microsoft.net \枠組み\ v2.0.50727ののの\のSystem.Windows.Forms.dll :システム:: Windowsの::フォーム::メッセージボックス'

私は' Windows 7のVisual Studio 2008 Professionalと.NET Framework 3.5のプロジェクトでC++で作成

誰かがこれを修正する方法を知っていますか?私はそれを全部見上げたが、解決策を見つけることができなかった。 私は十分な情報を与えたらいいと思う。 ありがとうございます。コーディグレーで与え

@edit例

System::String btn_texto = txt_login->Text->ToString(); 
System::Windows::Forms::MessageBox(NULL, "Hello!", "HI", MB_OK | MB_ICONEXCLAMATION); 

エラーが

を頂いた

エラーC3149: 'システム::文字列': トップレベルずにここにこのタイプを使用することはできません "^'エラーC2661: ' System :: Windows :: Forms :: MessageBox :: MessageBox ':オーバーロードなし 関数は4つの引数をとります

だから私は、システムの後に^を追加することによって、最初のエラーを解決する::文字列 はこのようなもの:

システム::文字列^ btn_texto = txt_login->テキストベース> ToStringメソッド();

しかし、2番目のエラーは修正されていません。ところで、「btn_texto」コンテンツをMessageBox関数にどのように追加すればよいですか?ありがとう!

答えて

1
System::String^ btn_texto = txt_login->Text->ToString(); 
MessageBox::Show("Working", "Info", MessageBoxButtons::OK, MessageBoxIcon::Exclamation); 

はそれを解決しました。 :)

0

C++の文字列型(std::string)と.NET Frameworkの文字列型(System::String)が混在していて、うまくいきません。少なくとも、それはとてもシンプルではありません。どちらを使いたいのかを決める。具体的には、最初のエラーが間違っている。このラインによって引き起こされる

string btn_texto = txt_login->Text->ToString(); 
  1. それはタイプstd::stringのオブジェクトを作成しますので、それは間違っている第一の理由は、(おそらく、あなたはusing namespace std;文を持っていますコードファイルの先頭にあります)は、C++の文字列型であり、.NET Frameworkの文字列型ではありません。 .NET Framework文字列型は、おそらく.NET WinFormsアプリケーションで使用したい文字列型です。名前空間を完全修飾する必要がありますSystem::String。それは(Textプロパティによって返される)ToString()方法を用いてStringオブジェクトにStringオブジェクトを変換するために無意味だから、それは間違っている

  2. 第二の理由です。最後の機能コールを完全にオフのままにします。

第2のエラーは、.NET Frameworkの場合と同様のWin32ヘッダは、MessageBox機能を提供することに起因します。コンパイラーは、呼び出したいものを知る必要があります。 ::MessageBox

  1. the Win32 MessageBox functionは(あなたが今しようとしているように)、あなたはグローバルスコープ解決演算子を使用する必要があります呼び出します。

    しかし、System::StringからCスタイルの文字列に変換できないという問題に遭遇します。 C++/CLIで利用可能なさまざまな文字列型を変換する方法については、this articleを参照してください。

  2. the .NET version of the MessageBox functionという簡単な方法があります。System::Windows::Forms::MessageBoxのように完全修飾することで実現できます。このバージョンの利点は、タイプSystem::Stringのパラメータを受け取るため、文字列変換を行う必要がないことです。 .NET MessageBoxラッパーは、Win32 MessageBox関数と同じオプションをすべてサポートしていますが、それらのうちのいくつかは異なる順序になっています。したがって、ドキュメントには十分注意する必要があります。

+0

質問に「@edit Cody Grey」を追加して、私が行ったことや何があったのかをチェックしてみてください。また、btn_textoを文字列の一部としてMessageBoxに追加する方法も尋ねました「btn_texto」の内容を他のテキストと連結したいのですが、どうすればいいですか? – Grego

関連する問題