在VS2008下使用CLR开发简单的用户界面程序

基本界面的设计部分不用说了,有图形化的设计工具,非常方便。下面是自己在写第一个CLR程序时遇到的难题与解决方案。

1.      文件打开/保存对话框

在主界面中添加相应的openFileDialog和SaveFileDialog,需要运行的地方加入如下语句:

openFileDlg1->ShowDialog();

edtSourceFile->Text = openFileDlg1->FileName;

2.      输入参数转换

很多情况下,需要用户从界面上输入参数,CLR可视化控件对象采用text成员来保存相应参数。Text成员是System::String格式的,程序在运行过程中可能会遇到将其转化为int、或C兼容字符串char[]等类型。

注意System::String类型不同于std::string类型,它没有c_str()的成员函数,所以不能使用atoi(str->c_str())的方式。关于它的几种转换方式,可参考下文:

http://blog.csdn.net/zh2208/article/details/3864355

http://yoyo.is-programmer.com/posts/12649.html

http://topic.csdn.net/t/20030311/10/1515180.html

最后采用的方法为:

Ø  转为int型:System::Convert::ToInt32(textbox1->Text);这是从哪个地方看的?

Ø 转为C字符串:

需要namespace: using namespace System::Runtime::InteropServices;

filename = (char*)Marshal::StringToHGlobalAnsi(textbox2->Text).ToPointer();

3.      弹出提示对话框

参考:http://blog.csdn.net/ddv1999/article/details/5905973

MessageBox::Show("message","caption",MessageBoxButtons::YesNo);

4.      获取当前路径

这个问题牵扯到两个方面,首先是如何获取当前应用程序完整文件名,其次是如果去掉文件名,只保留路径。第一个问题可采用系统API:GetModuleFileName实现,第二个问题很多网友给出了很巧妙的解决方案,但不知为何在CLR中都没有试验成功。可以参考:

http://zhidao.baidu.com/question/185553579.html

http://zhidao.baidu.com/question/77777163.html

http://www.cppblog.com/wrhwww/archive/2008/10/21/64579.aspx

http://www.cppblog.com/fwxjj/archive/2008/03/11/44163.html

直觉是String类应该会有相应的方法来实现相关操作,对着它的成员函数表摸索了一阵子,最终找到如下实现方案:

TCHAR chPath[128];//注意,用是的TCHAR类型,这也是以上几篇文章里介绍的方法不能使用的主要原因

System::String^ tempstr;

 

GetModuleFileName(NULL,chPath,128);

tempstr = gcnewString(chPath);

openFileDlg1->InitialDirectory =tempstr->Substring(0,tempstr->LastIndexOf('\\'));

你可能感兴趣的:(api,String,null,System,图形,textbox)