2012-03-28 19 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專業,我在按鈕上增加了點擊功能(雙擊設計模式),所以我在其生成的函數內部編寫了代碼。錯誤上的Visual C++形式,簡單的MessageBox並分配從文本框的文本字符串

它產生2個錯誤:

錯誤1:

錯誤C2440:初始化:不能從 '系統::字符串^' 轉換爲「標準:: basic_string的< _Elem,_Traits ,_AX>」

錯誤2:

錯誤C2872:'MessageBox':ambiguous symbol 1>可能是 'C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ winuser.h(7374) :int MessageBox(HWND,LPCTSTR,LPCTSTR,UINT) '1>或
'C:\ WINDOWS \ microsoft.net \框架\ V2.0.50727 \ System.Windows.Forms.dll的 :系統:視窗:形式:MessageBox的'

我m在Visual Studio 2008 Professional上使用C++創建Windows 7和.NET Framework 3.5下的項目

有人知道我該如何解決這個問題?我查了一遍,但找不到解決方案。 我希望我給了足夠的信息。 在此先感謝。

科迪灰色鑑於@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':no overload 函數需要4個參數

因此,我通過將解決的第一個錯誤^後系統::字符串 是這樣的:

系統::字符串^ btn_texto = txt_login->文本 - >的ToString();

但第二個錯誤是不固定的,順便說一下,我將如何在MessageBox函數中添加「btn_texto」內容?謝謝!

回答

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

  2. 這是錯的第二個原因是因爲它是毫無意義的轉換String對象(由Text屬性返回)使用ToString()方法String對象。將最後一個函數完全關閉。

第二個錯誤是由於Win32頭文件提供了一個MessageBox函數,就像.NET Framework一樣。編譯器需要知道你想調用哪一個。

  1. 要調用the Win32 MessageBox function(就像你現在嘗試做),你需要使用全局範圍解析操作符:::MessageBox

    但是然後你會遇到不能從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 Gray」來向你展示我做了什麼以及我得到了什麼錯誤,檢查了它,並且我還問了如何將btn_texto作爲字符串的一部分添加到MessageBox中而且我還想將「btn_texto」內容與其他文本連接起來,我該怎麼做? – Grego 2012-03-28 18:24:39

相關問題