|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
snciset
註冊時間: 2007-12-06 文章: 66 來自: 台北
第 1 樓
|
發表於: 星期六 一月 19, 2008 11:46 pm 文章主題: Losfocus 和 setfocus |
|
|
或許我還是還沒跳脫出10年前dos的框框吧!但還是請教一下,就是有點DO WHILE .NOT. EMPTY(),強迫把游標停在欄位上,要求USER輸入~~~~
我想在一個TEXT1.LOSFOCUS的事件中,當判斷
IF EMPTY(TEXT1.VALUE)
TEXT1.SETFOCUS
ENDIF
但游標不會停在TEXT1,這可以做得到嗎? _________________ 一個LKK的勞工,只為了維護15年前寫的一些在dos下clipper的東東,96年11月決定學foxpro |
|
回頂端 |
|
|
snciset
註冊時間: 2007-12-06 文章: 66 來自: 台北
第 2 樓
|
發表於: 星期日 一月 20, 2008 12:24 am 文章主題: |
|
|
我好像有找到 text1.valid 可用,return .f.即可,但後果太嚴重了,連我要執行取消buton用的TABLEREVERT(.T.)都無法使用,有點傷腦筋耶 _________________ 一個LKK的勞工,只為了維護15年前寫的一些在dos下clipper的東東,96年11月決定學foxpro |
|
回頂端 |
|
|
sanchi
註冊時間: 2003-11-11 文章: 61
第 3 樓
|
發表於: 星期日 一月 20, 2008 9:51 am 文章主題: |
|
|
偶用
thisform.text1.setfocus可work |
|
回頂端 |
|
|
nelsonchuang
註冊時間: 2003-09-04 文章: 563 來自: 臺灣
第 4 樓
|
發表於: 星期日 一月 20, 2008 5:41 pm 文章主題: |
|
|
snciset 寫到: | 我好像有找到 text1.valid 可用,return .f.即可,但後果太嚴重了,連我要執行取消buton用的TABLEREVERT(.T.)都無法使用,有點傷腦筋耶 |
沒有那麼嚴重,既然寫得出程式,你就應該想想,設定什麼樣的狀況下讓他依照你想作的動作執行,可以的啦~ _________________ 大家好,請多指教 |
|
回頂端 |
|
|
snciset
註冊時間: 2007-12-06 文章: 66 來自: 台北
第 5 樓
|
發表於: 星期日 一月 20, 2008 6:31 pm 文章主題: |
|
|
嗯,今天放自己一天假沒想太多,nelsonchuang說的沒錯,可能剛開始寫太急了,慢慢想囉~~我覺得總統都可以換人了,沒啥事那麼嚴重的~~~畢竟自己也有點年紀了,腳步放慢一點~~ _________________ 一個LKK的勞工,只為了維護15年前寫的一些在dos下clipper的東東,96年11月決定學foxpro |
|
回頂端 |
|
|
snciset
註冊時間: 2007-12-06 文章: 66 來自: 台北
第 6 樓
|
發表於: 星期日 一月 20, 2008 8:24 pm 文章主題: |
|
|
我把問題說清楚點好了,我在一個FORM上面放了一個TEXT和BUTTON,TEXT是要用來輸入資料,BUTTON是當真的不要輸入時用TABLEREVERT(.T.)來取消新增或修改,其實TEXT是要輸入一身分證字號,所以當我判斷ID檢號錯誤或EMPTY()時,游標能停留在TEXT上強迫輸入,但當使用者真的不輸入要放棄時,按一下取消 BUTTON即可,所以先是在TEXT.LOSFOCUS時,判斷TEXT.VALUE之ID檢號錯誤或EMPTY()時,即產生TEXT.SETFOCUS,但好像在同一物件的LOSFOCUS裡執行SETFOCUS是沒用的,至少我試了游標沒再能停留在TEXTG上,而用text.valid判斷的話,RETURN .F.倒是可以達到強迫輸入的目的,但如使用者要用用TABLEREVERT(.T.) 則不行,甚至滑鼠點FORM上的任何地方都沒反應,連要把整個FOXPRO關掉也關不掉,游標就只會停在TEXT要求輸入,這也太霸道了,各位大哥,我也再想了一陣子,好像沒辦法耶,真的是魚與熊掌不可兼得嗎?
(我不想用text.valid 之ERRORMESSAGE EVENY事件來取消,我想用BUTTON呀~~) _________________ 一個LKK的勞工,只為了維護15年前寫的一些在dos下clipper的東東,96年11月決定學foxpro |
|
回頂端 |
|
|
tigerlee39y
註冊時間: 2007-11-26 文章: 132 來自: taipei
第 7 樓
|
發表於: 星期一 一月 21, 2008 3:29 am 文章主題: |
|
|
我想這是在設計程式觀念上的問題,以前在clipper時也是同樣的問題
1.如果在valid中設return .f.,就會碰到輸入之值不正確時, 無法跳出該欄位,自然不能做別的事,程式也無法結束
2.因此觀念改變一下,有輸入值與輸入空白值分別判斷
a.輸入空白值,允許跳出該欄位,可以再去做別的事
b.輸入值不正確,仍然停留在該欄位, 同時反白該欄位(以便按一下空白鍵)
c.還要再設一個button "確定新增"(or 修改),同樣要檢查該欄是否空白,如果是空白,動作如同取消, 不做任何變動
3.這種作法,一般是用在key field
我個人都是利用此規則寫的 _________________ 各取所需 各盡所能 |
|
回頂端 |
|
|
nelsonchuang
註冊時間: 2003-09-04 文章: 563 來自: 臺灣
第 8 樓
|
發表於: 星期一 一月 21, 2008 8:57 am 文章主題: |
|
|
不要一直繞在Return .f.,你寫了Clipper這麼久,就應該知道,凡事必定有其他方法解決.
比如說Clipper,當使用者不輸入,要跳出時,按下什麼按鍵就可以離開,你要如何得知他按了什麼按鍵.
(這是很久,很久,很久以前我那時侯的解決方案)等到你解決問題了,再去想有沒有更好的解決方案.
現在不是Dos時代,不必翻書,只要努力查Help,就會有相關的資訊.
我認為目前你的問題在於,你想要很快的解決一個問題,但是你卻沒有真的讓自己冷靜下來的去想整個環節.
這樣子不太好,因為你會落入自己大腦設定的圈套:不問人,就找不到答案. _________________ 大家好,請多指教 |
|
回頂端 |
|
|
snciset
註冊時間: 2007-12-06 文章: 66 來自: 台北
第 9 樓
|
發表於: 星期一 一月 21, 2008 11:45 am 文章主題: |
|
|
其實當然能解決的,只是第一次使用foxpro寫東西,有很多事件的執行程序先後搞不清楚,像在try focus事件時,才知道valid是先發生,其實在下真的還有更多method觸發順序還沒搞清楚,只能憑藉這個第一個改寫的東東慢慢了解了,還希望各位時戰經驗豐富的先進們別嫌我囉唆才好,就好像nelsonchuang說的,先想一下環節,其實整個架構大概想好了,只是一些細節問題因自己對開發軟體的陌生,而導致一些小瓶頸,但我知道各位會幫我渡過的,真的是由衷感謝熱心又見不著的得你們~~ _________________ 一個LKK的勞工,只為了維護15年前寫的一些在dos下clipper的東東,96年11月決定學foxpro |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 10 樓
|
發表於: 星期一 一月 21, 2008 11:59 am 文章主題: |
|
|
我們是這樣做啦.
1.先增加一個屬性,例如:bModified
2.在 text 物件的 when 事件上填入
代碼: |
&& 當輸入游標進到這個text物件時,令bModified為0
thisform.bModified=0
|
3.在 text 物件的 InteractiveChange 事件上填入
代碼: |
&& 當value改變時,令bModified為1
thisform.bModified=1
|
3.在 text 物件的 Valid 事件上填入
代碼: |
IF thisform.bModified=1
thisform.bModified=0
&& value 檢查 ---- start ----
&& value 檢查 ---- end ----
ENDIF
|
vfp6 以後的版本,
valid 事件無法使用 setfocus,
不過你可以另外準備一個 checkbox,
當作數值檢查的地方 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 11 樓
|
發表於: 星期一 一月 21, 2008 2:35 pm 文章主題: |
|
|
去找一個 "現代化" 的範例,
從中研究vfp 物件模型的原理.
再加入自己想法,
是比較好的作法. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
minzer
註冊時間: 2008-01-21 文章: 1
第 12 樓
|
發表於: 星期一 一月 21, 2008 4:49 pm 文章主題: |
|
|
之前我也有像你類似的想法,用valid來防錯!
但是後來發現,任何按鈕,事件,甚至想按右上角的離開都沒辦法,
後來,我就改寫成
在關鍵按鈕上判斷;例如在按下儲存,確定時,再判斷text的值是否正確,
若否,再幫它focus回text就好了!
如此,又不用鎖住游標,又可以彈性加入判斷及防錯,
建議你可以試試! |
|
回頂端 |
|
|
nelsonchuang
註冊時間: 2003-09-04 文章: 563 來自: 臺灣
第 13 樓
|
發表於: 星期一 一月 21, 2008 6:20 pm 文章主題: |
|
|
minzer 寫到: | 之前我也有像你類似的想法,用valid來防錯!
但是後來發現,任何按鈕,事件,甚至想按右上角的離開都沒辦法,
後來,我就改寫成
在關鍵按鈕上判斷;例如在按下儲存,確定時,再判斷text的值是否正確,
若否,再幫它focus回text就好了!
如此,又不用鎖住游標,又可以彈性加入判斷及防錯,
建議你可以試試! |
=.=||
既然你們都說那麼難,而連平常最不喜歡作範例的Syntec都出手了...
那我也說一下遠古時代我的作法好了.
引用Syntec的屬性bModified
在keypress的方法中
thisform.bModified =.t.
if nkeycode=27 && esc
thisform.bModified=.f.
endif
在valid的地方
if thisform.bModified
這裡就是你的檢查程式
endif
至於bModified 必須在你進行新增,修改,刪除時設定為.t.
如果你離開該欄之後又設定為.t.就會發生跳不出該欄的位置...
你試試,就說了真的沒那麼難,冷靜下來,一定會想到...
(想當年,那個叫什麼康和資訊的,也想不到有這招.....呵呵~) _________________ 大家好,請多指教 |
|
回頂端 |
|
|
snciset
註冊時間: 2007-12-06 文章: 66 來自: 台北
第 14 樓
|
發表於: 星期一 一月 21, 2008 7:29 pm 文章主題: |
|
|
我剛剛還沒看各位大哥提供的解答前,是自己將檢查程式移到text.valid(之前是放在text.losfocus做檢查),而在valid增加一個messagebox,如檢查不通過要求use回答放棄或繼續,如放棄,則執行thisform.button_cancel.click 再return .t. ,繼續則return .f.將游標留在text上 ,結果可以耶,我知道這是很笨的做法,嗯,我沒試過新增屬性,我應該試一下,否則功力是不會進步的,一天到晚提些簡單的基本問題,也會被各位大哥笑,不過每天多笑笑是有益身心的,在此還望各為多擔待囉~~
syntech大哥的方法我試了試再報向各位報告喔,不過最近幾天在趕我們單位的決算報告,可能有一點忙,後天再試試囉~~ _________________ 一個LKK的勞工,只為了維護15年前寫的一些在dos下clipper的東東,96年11月決定學foxpro |
|
回頂端 |
|
|
小桑•無痕
註冊時間: 2003-07-08 文章: 304 來自: Tainan, Taiwan
第 15 樓
|
發表於: 星期四 一月 24, 2008 4:13 pm 文章主題: |
|
|
我是在存檔的時候,再去做檢查,不符合條件的就利用 .SetFocus() 跳回該欄位 _________________ 用力 Try 一下...可以發現很多好玩的事.... |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|