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

Losfocus 和 setfocus
前往頁面 1, 2  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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呀~~) Crying or Very sad

_________________
一個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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 11 樓

發表發表於: 星期一 一月 21, 2008 2:35 pm    文章主題: 引言回覆

去找一個 "現代化" 的範例,
從中研究vfp 物件模型的原理.
再加入自己想法,
是比較好的作法.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 1, 2  下一頁
1頁(共2頁)

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


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