Re: [問題] 已經做好的表單可能跨語言移植嗎?(VC+ …
由於問題已經解決了,所以自回一下,
提供遇到相同問題的版友參考,當然也希望我所提供的是個笨方法,
能夠拋磚引玉,得到各位高手更好的解答。
假設有一個按鈕物件,名稱為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)