MessageBox:输出多个字符串

MessageBox: Output multiple strings

这是一个用c++编写的Windows窗体程序。 其中的objective,就是得到一个词,由用户写在文本框中,叫做tbInputSrc,用于在文件中搜索代码。 我在此程序中打开的文件包含以下内容:

1111 aaaa aaaa 1
2222 bbbb bbbb 3
3333 cccc cccc 5
4444 dddd dddd 7
5555 eeee eeee 7

数字是代码(codice),第一个"word"是名字(nome),第二个"word"是姓氏(cognome),数字是标记(vote ) 的学生。 因此,objective 是通过在文本框中编写的代码在文本框中显示学生的姓名和姓氏。

ifstream input("output.txt");
string cognome, nome;
string text;
int codice, voto;
int tr;

tr = 0;

while (!tr && input >> codice >> cognome >> nome >> voto) {
    if (this->tbInputSrc->Text == Convert::ToString(codice)) {
        tr = 1;
    }
}

if (!tr) {
    MessageBox::Show("Alunno non trovato", "Risultato ricerca", MessageBoxButtons::OK, MessageBoxIcon::Error);
} else {
    MessageBox::Show(/*name and surname of the student*/, "Risultato ricerca", MessageBoxButtons::OK, MessageBoxIcon::Information);
}

input.close();

我试过以不同的方式显示名字和姓氏: 使用简单的字符串总和:

if (!tr) {
    MessageBox::Show("Alunno non trovato", "Risultato ricerca", MessageBoxButtons::OK, MessageBoxIcon::Error);
} else {
    string phrase = cognome + " " + none;
    MessageBox::Show(phrase, "Risultato ricerca", MessageBoxButtons::OK, MessageBoxIcon::Information);
}

我试过使用 c_str:

if (!tr) {
    MessageBox::Show("Alunno non trovato", "Risultato ricerca", MessageBoxButtons::OK, MessageBoxIcon::Error);
} else {
    string phrase = cognome + " " + none;
    MessageBox::Show(phrase.c_str(), "Risultato ricerca", MessageBoxButtons::OK, MessageBoxIcon::Information);
}

所有这些,给我报错 E0304 所以我想问一下,有没有一种简单或更好的方法可以在 MessageBox 正文中显示多个字符串?

问题是 MessageBox::Show 是 C++.NET,所以它的第一个参数是 System::String^ 类型(指向 System::String 的托管指针)而不是 std::string(也不是const char *)。您需要以某种方式将字符串转换为该类型。尝试传递 gcnew String(phrase.c_str()).

详情见https://docs.microsoft.com/en-us/dotnet/api/system.string?view=netframework-4.8