首页 文章

Visual C Forms,简单MessageBox上的错误,并将文本从textfield分配给字符串

提问于
浏览
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窗体应用程序,我添加了一个单击功能(通过双击设计模式下的按钮),所以我在它生成的函数内编写了代码 .

它产生了2个错误:

错误1:

错误C2440:'初始化':无法从'System :: String ^'转换为'std :: basic_string <_Elem,_Traits,_Ax>'

错误2:

错误C2872:'MessageBox':模糊符号1>可以是'C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ winuser.h(7374):int MessageBox(HWND,LPCTSTR,LPCTSTR,UINT) '1>或'c:\ windows \ microsoft.net \ framework \ v2.0.50727 \ system.windows.forms.dll:System :: Windows :: Forms :: MessageBox'

我在Windows 7上的Visual Studio 2008 Professional和.NET Framework 3.5下的项目中使用C创建

有人知道如何解决这个问题?我查了一下但找不到解决办法 . 我希望我提供了足够的信息 . 提前致谢 .

@edit Example Given by Cody Gray

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

错误得到了

错误C3149:'System :: String':此处不能使用此类型而没有顶级'^'错误C2661:'System :: Windows :: Forms :: MessageBox :: MessageBox':没有重载函数需要4个参数

所以我在System :: String之后添加^解决了第一个错误:

System :: String ^ btn_texto = txt_login-> Text-> ToString();

但第二个错误没有修复,顺便说一句,我如何在MessageBox函数中添加“btn_texto”内容?谢谢!

2 回答

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

    解决了它 . :)

  • 1

    您将C字符串类型( std::string )和.NET Framework字符串类型( System::String )混合在一起,并且's just not going to work out well. Or at least it'不会非常简单 . 决定你要使用哪一个并坚持下去 .

    更具体地说,第一个错误是由于这一行错误引起的:

    string btn_texto = txt_login->Text->ToString();
    
    • 它出错的第一个原因是因为它创建了一个 std::string 类型的对象(可能是在代码文件的顶部有一个 using namespace std; 语句),这是C字符串类型,而不是.NET Framework字符串类型 . .NET Framework字符串类型是您必须将命名空间完全限定为 System::String 的类型 .

    • 第二个原因's wrong is because it'使用 ToString() 方法将 String 对象(由 Text 属性返回)转换为 String 对象毫无意义 . 完全关闭最后一个函数调用 .

    第二个错误是由Win32标头提供 MessageBox 函数引起的,.NET Framework也是如此 . 编译器需要知道您要调用哪一个 .

    但是你会遇到无法从 System::String 转换为C风格字符串的问题 . 有关如何在C / CLI中提供的各种字符串类型之间进行转换的说明,请参见this article .

    • 更简单的方法可能是调用the .NET version of the MessageBox function,你可以通过如下完全限定来完成: System::Windows::Forms::MessageBox . 此版本的优点是您不需要进行任何字符串转换,因为它接受 System::String 类型的参数 . .NET MessageBox 包装器支持与Win32 MessageBox 函数相同的所有选项,但其中一些选项的顺序不同,因此您需要特别注意文档 .

相关问题