VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

combox 使用時發生controlSource值被截掉問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
alung



註冊時間: 2005-11-23
文章: 80


第 1 樓

發表發表於: 星期四 一月 08, 2009 7:19 pm    文章主題: combox 使用時發生controlSource值被截掉問題 引言回覆

有訂單檔orderitem(內有產品編號欄位itemn)及產品檔item(內有產品編號及產品名稱欄位分別為 itemn, desc),產品編號itemn欄位為數字型態。
在combox欄位下拉點選產品編號後在右邊欄位會出現產品名稱,
combox欄位物件內容:
controlSource=orderitem.itemn
GotFocus程序→this.rowsource='';this.rowsourcetype=3;this.rowsource='SELECT itemn, desc FROM item WHERE custn=custn_w INTO CURSOR TEMPB'
InterativeChange程序→ThisForm.產品名稱.Text1.value=tempb.desc;ThisForm.單位.Text1.setfocus
假設產品編號下拉選330005,combox欄位顯示出330005但this.value前面數字值會被截掉後變為5
假設產品編號下拉選330001,combox欄位顯示出330001但this.value前面數字值會被截掉後變為1
若將InterativeChange程序改→ this.value=tempb.itemn;ThisForm.產品名稱.Text1.value=tempb.desc;ThisForm.單位.Text1.setfocus
combox欄位物件卻顯示出空白,this.value內容卻為正常值330001
請教是哪裡出問題呢? 謝謝幫忙
回頂端
檢視會員個人資料 發送私人訊息
DennisTsai



註冊時間: 2005-07-26
文章: 178


第 2 樓

發表發表於: 星期五 一月 09, 2009 8:10 am    文章主題: 引言回覆

把欄位的DESC改個名試試
回頂端
檢視會員個人資料 發送私人訊息
alung



註冊時間: 2005-11-23
文章: 80


第 3 樓

發表發表於: 星期五 一月 09, 2009 8:36 am    文章主題: 引言回覆

DennisTsai 寫到:
把欄位的DESC改個名試試

還是一樣,謝謝幫忙哦
回頂端
檢視會員個人資料 發送私人訊息
alung



註冊時間: 2005-11-23
文章: 80


第 4 樓

發表發表於: 星期五 一月 16, 2009 11:31 am    文章主題: Re: combox 使用時發生controlSource值被截掉問題 引言回覆

InterativeChange程序→= MESSAGEBOX("test1:"+allt(str(this.value)),"訊息");= MESSAGEBOX("test2:"+allt(str(this.value));" 訊息");ThisForm.產品名稱.Text1.value=tempb.desc;ThisForm.單位.Text1.setfocus
訊息會出現test1:1 (前面被截掉)及 test2:330001
ControlSource之orderitem.itemn會存成1 而不是330001
是因為orderitem.itemn 及 item.itemn 欄位宣告數值的關係嗎?
究竟是哪裡出問題呢? 很傷腦筋耶~有沒有人可幫忙呢?
回頂端
檢視會員個人資料 發送私人訊息
alung



註冊時間: 2005-11-23
文章: 80


第 5 樓

發表發表於: 星期五 一月 16, 2009 11:37 am    文章主題: Re: combox 使用時發生controlSource值被截掉問題 引言回覆

sorry第2個訊息打錯了應是= MESSAGEBOX("test2:"+this.Displayvalue" 訊息");
會出現 test2:330001
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 6 樓

發表發表於: 星期五 一月 16, 2009 5:06 pm    文章主題: 引言回覆

如果你的 controlsource 是數值型態,
那它的 value 就是 .listindex
假設你沒有填任何字在 controlsource
在 value 填入空白字串,
則它的 value 跟 .displayvalue 一樣

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
alung



註冊時間: 2005-11-23
文章: 80


第 7 樓

發表發表於: 星期一 一月 19, 2009 9:03 am    文章主題: 引言回覆

garfield 寫到:
如果你的 controlsource 是數值型態,
那它的 value 就是 .listindex
假設你沒有填任何字在 controlsource
在 value 填入空白字串,
則它的 value 跟 .displayvalue 一樣

我在InterativeChange程序再多加入一行
= MESSAGEBOX("test3:"+allt(str(this.ListIndex))," 訊息");
顯示出來是test3:1 (前面33000被截掉,欄位畫面顯示正確,內容卻錯誤),跟allt(str(this.value))內容一樣。
如果我使用this.value= val(this.Displayvalue) or
select tempb;this.value=tempb.itemn
那該欄位畫面卻出現空白(內容正確,欄位畫面卻顯示錯誤),
感謝幫忙
回頂端
檢視會員個人資料 發送私人訊息
andywilliams



註冊時間: 2004-10-23
文章: 111


第 8 樓

發表發表於: 星期一 一月 19, 2009 11:13 am    文章主題: 引言回覆

在關鍵 DeBug點 如 GotFocus,InterativeChange,LossFocus..加入
@ 0,1 say ..combox.DisplayValue && combox顯示的值
@ 1,1 say ..combox.Value && combox存入的值
@ 2,1 say orderitem.itemn && combox.controlSource的值
inkey(1)
看看三個值如何變化...就知道問題在那裡
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
alung



註冊時間: 2005-11-23
文章: 80


第 9 樓

發表發表於: 星期一 一月 19, 2009 4:40 pm    文章主題: 引言回覆

andywilliams 寫到:
在關鍵 DeBug點 如 GotFocus,InterativeChange,LossFocus..加入
@ 0,1 say ..combox.DisplayValue && combox顯示的值
@ 1,1 say ..combox.Value && combox存入的值
@ 2,1 say orderitem.itemn && combox.controlSource的值
inkey(1)
看看三個值如何變化...就知道問題在那裡

我在三個程序分別加入MESSAGEBOX後,先執行GotFocus
= MESSAGEBOX("G1→"+allt(this.Displayvalue),"訊息")
= MESSAGEBOX("G2→"+allt(str(this.value)),"訊息")
= MESSAGEBOX("G3→"+allt(str(orderitem.itemn )),"訊息")
G1(this.Displayvalue)、G2(this.value)、G3(orderitem.itemn)分別為空白、0、0
滑鼠下拉選擇33001產品編號後會執行InterativeChange
this.Displayvalue、this.value、orderitem.itemn 分別為33001、1、0
然後會接續執行LostFocus
this.Displayvalue、this.value、orderitem.itemn 分別為33001、1、1
(欄位畫面顯示正確,內容卻錯誤)
倘若在LostFocus最後加入this.value=val(this.Displayvalue)再執行顯示指令
this.Displayvalue、this.value、orderitem.itemn 則分別為空白、33001、33001
(欄位畫面顯示錯誤→空白值,內容正確→33001)

感謝幫忙思考^^
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 10 樓

發表發表於: 星期一 一月 19, 2009 5:19 pm    文章主題: 引言回覆

你的問題根源就是你的 ControlSource 裡所指定的欄位型態是數值,
當然.value 一定是.listindex 的數字,
它不會用 .list( .listindex,1 ) 來當 .value值,
就算你.list( .listindex,1 ) 的原本欄位型態也是數值,
combox 也不會將 .value = .displayvalue
請往如何解決這種特性的方式來思考,
不用再花時間去 debug .
提示: controlSource=''

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
tigerlee39y



註冊時間: 2007-11-26
文章: 132
來自: taipei

第 11 樓

發表發表於: 星期四 一月 22, 2009 7:26 am    文章主題: 引言回覆

garfield兄說的不錯,在combox欄位下拉中的來源資料(controlSource)最好不要設成數值
*來源值如果為數值,當你選330005時,RETURN回來的值是330005在來源值的第5筆,也不是你所講的"數字值會被截掉後變為5"
*產品編號應設為文字欄才為正確
*原則:要作 +-*/的欄位,才設為數值

_________________
各取所需 各盡所能
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作