參數傳遞的幾種用法。
2024-07-21 02:09:07
供稿:網友
參數傳遞的幾種用法。
一次需要在幾個窗口之間傳遞參數,最開始想到的是定義一個全局變量。
可以做了以后發現并不太理想。
最后向別人學習了參數傳遞,解決了很多問題,感覺上也不容易出錯。
現在寫出來與大家分享,也為自己保留,以便察看。
-----------------------------------------------------------
先來解釋一下參數傳遞的函數意義:
message.stringparm (傳的是字符)
message.doubleparm (傳的是數值)
message.powerobjectparm (傳的是可以是窗口、對象、結構等等)
例如:(以數值傳遞為例)
在w_old窗口的相關事件中寫入如下代碼,表示發送要傳遞參數:
long ll_old
ll_old = 你要傳遞的數值
openwithparm(w_new(//新窗口),ll_old)
------------
在w_new窗口(新窗口)的相關事件中寫如下代碼表示接受參數:
long ll_new
ll_new = message.doubleparm /*這樣就接收到了你要的參數了。*/
-----------------------------------------------------------
上面只是一個參數的傳遞,
對于多參數的傳遞,說是有3種方法:
1.用字符傳組傳遞,到目的地進行分割
2.傳遞結構對象
3.用對象做載體傳遞
我現在掌握的也就前兩種,最后一種我不太理解。以后會了再補充。
現在先來說:1.用字符傳組傳遞,到目的地進行分割
意思也就是說,把多個參數組合成一個進行傳遞,
組合的時候需要加入分割符---自己定義的。接收參數后再將其分割成多個。
*在w_old窗口的相關事件中寫入如下代碼:
/*例如組合好的自符串為pass_old="123|4567" ---注意組合前123和4567
可能都是long型的,不要緊,轉換類型就行*/
string pass_old
pass_old =string(ll_pre) + "|" + string(ll_tra)
// ll_pre = 123,ll_tra = 4567
openwithparm(w_new(//新窗口),pass_old)
----------
*在w_new窗口(新窗口)的相關事件中寫如下代碼:
integer li_fen /*定義用來記錄分割符的位置*/
long ll_newpre,ll_newtra /*用來分別存放兩部分*/
string pass_new
pass_new = message.stringparm
li_fen=pos(pass_new,"|") /*確定并記錄分割符的位置*/
ll_newpre=long(left(pass_new,li_fen - 1))
ll_newtra=long(right(pass_new,len(pass_new) - li_fen))
/* 上面就是第一種方法-----用字符傳組傳遞,到目的地進行分割*/
--------------------------------------
在來說說:2.傳遞結構對象
在庫文件中 創建一個structure對象,注意是創建,因為它就象一個窗口一樣
是個對象,不是用與句定義的。structure s_info
變量名 變量類型
id long
name char
sex char
/* 先以此為例。 */
**在w_old窗口的相關事件中寫入如下代碼:
s_info lstr_pre
lstr_pre.id = 1 /* 賦id的值
lstr_pre.name = "zhdleo" /* 賦name的值
lstr_pre.name = "male" /* 賦sex的值
openwithparm(w_new(//新窗口),lstr_pre)
**在w_new窗口(新窗口)的相關事件中寫如下代碼:
s_info lstr_tra
long tra_id
string tra_name
string tra_sex /* 定義要接收的變量
lstr_tra = message.powerobjectparm /* 接收參數
tra_id = lstr_tra.id
tra_id = lstr_tra.name
tra_id = lstr_tra.sex /* 賦值
/* 上面就是第二種方法------傳遞結構對象
-------------------------------------------
我個人覺得第二種方法還是非常優的,不但結構清楚,而且定義了結構體也
可以看見,容易理解。
至于第三種,還有待我慢慢研究。
如果誰還有好的方法,或是比較清楚第三種的,或是還有更好的方法的,
請e-mail:[email protected]