2015-06-20 103 views
1

我试图在C++ CLI程序中更改标签的文本。我需要在用户输入的文本框中输入一个值,将其插入到一个简短的字符串中,然后将标签更改为该字符串。我在构造字符串时没有问题,但是我无法将标签设置为新字符串。这里是我的代码...更改C++ CLI标签的文本

std::string v1str = "Phase A: "; 
v1str.append(vt2); //vt2 is type str::string 
v1str.append(" Vac"); 
label->Text = v1str; 

这是我收到错误消息...

enter image description here

我为什么不允许通过v1str为标签文本制定者?我如何将我构建的字符串传递给标签文本设置器?

回答

1

Label::Text的类型为System::String^,这是一个管理的.NET字符串对象。因为它们是不同的类型,所以不能直接将std:string指定给System::String^

您可以convert a std::stringSystem::String。但是,您很可能只想直接使用System::String类型:

System::String^ v1str = "Phase A: "; 
v1st += vt2; // or maybe gcnew System::String(vt2.c_str()); 
v1str += " Vac"; 
label->Text = v1str; 
+0

谢谢,就是这样。我实际上对上面的代码做了一个改动。 vt2是'str :: string'类型,它不能与'System :: String^v1str'连接。幸运的是,vt2是通过在文本框(System :: String ^'形式)中输入的原始文本创建的,以确保它是一个正确的输入,所以我可以使用'textbox-> Text'来代替' vt2'在你的上面的代码来解决我原来的问题。 – JohnnyW

1

C++/CLI不是C++,你不能在那里使用std::string。但是你可以C++/CLI中使用C++,并转换std::string,并从System::String

//In C++/CLI form: 
#include <vcclr.h> 

System::String^ clr_sting = "clr_sting"; 

//convert strings from CLI to C++ 
pin_ptr<const wchar_t> cpp_string = PtrToStringChars(clr_sting); 

//convert strings from C++ to CLI 
System::String^ str = gcnew System::String(cpp_string); 

//or 
std::string std_string = "std_string"; 
System::String^ str2 = gcnew System::String(std_string.c_str()); 
+0

谢谢。我最终使用@ shf301答案来解决我的问题,但这是我第一次使用CLI,这个评论帮助我清除了很多我一直存在的困惑。 – JohnnyW