作者CYBASTER (degeneration)
看板C_Sharp
标题Re: [问题] 已经做好的表单可能跨语言移植吗?(VC+ …
时间Thu Sep 4 23:00:10 2008
由於问题已经解决了,所以自回一下,
提供遇到相同问题的版友参考,当然也希望我所提供的是个笨方法,
能够抛砖引玉,得到各位高手更好的解答。
假设有一个按钮物件,名称为add_submit,它在c++里的code如下:
private: System::Windows::Forms::Button^ add_submit;
//宣告物件
void InitializeComponent(void)
{
this->add_submit = (gcnew System::Windows::Forms::Button());
//产生实体
// add_submit
//设定属性
this->add_submit->Location = System::Drawing::Point(9, 120);
this->add_submit->Name = L"add_submit";
this->add_submit->Size = System::Drawing::Size(168, 50);
this->add_submit->TabIndex = 0;
this->add_submit->Text = L"新增资料";
this->add_submit->UseVisualStyleBackColor = true;
this->add_submit->Click += gcnew System::EventHandler(this,
&Form1::add_submit_Click);
//
}
//宣告事件及对应方法
private: System::Void add_submit_Click(System::Object^ sender,
System::EventArgs^ e){}
一个控制项的产生,一共有宣告物件,产生物件实体,
及设定物件所有属性(大小、位置、名称等等),
最後是设定触发它的事件及它所执行的方法等四大步骤,
以同样的表单名称Form1而言,在c++版本里,这些code都会产生在Form1.h里,
而在c#当中,前三者会放在Form1.Designer.cs当中,最後一者才放在Form1.cs里,
所以只要把它们复制贴上到应该对应的位置,用编辑/取代再改成c#的语法就好。
(非常好认,因为函式名称都相同,如果真的不知道,
随便拖曳一个按钮到空白的Form1上头,让它自动产生该控制项程式码,
就可以知道什麽东西该放哪里。)
至於把c++语法改成c#语法,不外乎是去掉^,把->改成.,gcnew改成new…
其实如果漏了什麽的话,只要编译看看,错误讯息就会提醒你。
我认为比较容易遗忘的是,有时会出现传参考的运算子&,要将它改成ref,
可是这麽一改会连逻辑运算子的&&(而且)一起改到,所以最好把目标选取起来修改。
以及,有个地方我try了比较久才发现错误在哪,在c#版本里,
「定位」和「决定控制项大小」的两个函数,
System::Drawing::Point和System::Drawing::Size前要加上new,否则会出现错误讯息,
可是你若点到设计检视时,它会自动帮你修正,
只是座标和大小全部变回default值而已。
其实最可靠的方法,是如上头所述,自己拖曳产生一个控制项後,
把code先拿来比对,确认要改哪些地方再下手。
--
我 是 可 悲 的 废 柴 作 家
http://bloodaugust22.spaces.live.com
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.41.88
※ 编辑: CYBASTER 来自: 123.193.41.88 (09/04 23:02)