 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
cgsusually67
註冊時間: 2009-10-14 文章: 41
第 1 樓
|
發表於: 星期四 十月 29, 2009 10:15 am 文章主題: grid 中邊打字邊搜索 |
|
|
請教各位先進:
我用一個form 裡面有grid1的物件,在form的keypress中寫下面的代碼
*GRDM1
IF !THISFORM.GRID1.VISIBLE=.T. &&先確認該GRID是焦點所在,再分按鍵作用,以作索引。
RETURN
ENDIF
@ 27 , 30 say nkeycode
@ 27 , 50 say nShiftAltCtrl
do case
case NKEYCODE = 127 && BackSpace.back a character
IF !EMPTY( MY_SEEK )
MY_SEEK = SUBSTR( MY_SEEK , 1 , LEN( MY_SEEK ) - 1)
@ 26 , 30
@ 26 , 30 say MY_SEEK
ENDIF
RETURN
case NKEYCODE = 10 && Ctrl_Enter.clear key buffers
MY_SEEK = ""
@ 26 , 30
RETURN
case nkeycode = 13 && Enter.確定
thisform.itemname = invtory.ino
thisform.release
return
case nkeycode = 27 && Esc.放棄
thisform.itemname = ""
thisform.release
return
otherwise && search data
IF CHR(nKeyCode)$"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
MY_RECNO=RECNO()
*@ 26 , 23 say MY_SEEK
SEEK MY_SEEK + UPPER( CHR( NKEYCODE ) )
IF !FOUND()
WAIT WINDOWS MY_SEEK + UPPER( CHR( NKEYCODE ) )
GO MY_RECNO &&停在最後找到紀錄的
ELSE
MY_SEEK=MY_SEEK+UPPER( CHR(nKeyCode) )
@ 26 , 30 say MY_SEEK
ENDIF
ELSE
.
* GO TOP
* MY_SEEK="" &&重設搜索鍵
ENDIF
endcase
這段代碼的作用為,當游標在grid1時,用keypress程序 攔截user在鑑盤所key的每一個字,然後搜索更新grid裡面的內容,但是很奇怪的是,我在鍵盤所打每一個的字,或按倒退鍵,速度很慢,但我在gird1,移動游標做上下筆資料移動時,速度又很正常,
請教各位前輩,這個問題是為甚麼是否有解 |
|
回頂端 |
|
 |
syntech
註冊時間: 2003-05-16 文章: 4249 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期四 十月 29, 2009 10:46 am 文章主題: |
|
|
我會避免作這種我認為是傻事的動作.
理由就在倒數三行中 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
 |
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 3 樓
|
發表於: 星期四 十月 29, 2009 12:01 pm 文章主題: |
|
|
按一個字就seek一次.........
會不會太操啊
如果真要搜尋
換用cursor試試看,我不確定
真正原因syntech老大已經說的很清楚了
好像之前也有人要vfp做出像google一樣及時搜尋的.....
沒有這麼需要這樣搞吧 |
|
回頂端 |
|
 |
lee188188
註冊時間: 2007-01-27 文章: 33
第 4 樓
|
發表於: 星期四 十月 29, 2009 5:16 pm 文章主題: |
|
|
請設一TEXTEDIT文字輸入欄, 點尋找時VISIBLE=.T.
interactive Change
---------------------------
SET NEAR ON
SEEK TRIM(THIS.VALUE)
SET NEAR OFF
THISFORM.GRID1.REFRESH
KeyPress
--------------------------
if nkeycode=13
thisform.grid1.setfocus
THIS.VISIBLE=.F.
nodef
else
if nkeycode=27
thisform.grid1.setfocus
nodef
endif
endif
即可達可您的要求
我覺得不要用 @ SAY, ... 這種輸出動作較慢, 應用LABEL顯示較好.
但是隨打隨找的畫面在主機多人且資料量大時反應較慢. |
|
回頂端 |
|
 |
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 5 樓
|
發表於: 星期四 十月 29, 2009 5:27 pm 文章主題: |
|
|
這樣搞會變成 你的每個客戶電腦都要不錯
網路還不可以太慢
導致慢的因素太多了
怕是搞到後來會變成砸自己腳的大石頭 |
|
回頂端 |
|
 |
cgsusually67
註冊時間: 2009-10-14 文章: 41
第 6 樓
|
發表於: 星期四 十月 29, 2009 5:28 pm 文章主題: 謝謝各位前輩指點 |
|
|
請問所謂的cursor 處理是甚麼意似,有可能會比較快嗎 |
|
回頂端 |
|
 |
cgsusually67
註冊時間: 2009-10-14 文章: 41
第 7 樓
|
發表於: 星期四 十月 29, 2009 5:57 pm 文章主題: 可是程式碼改成下面這樣....還是慢 |
|
|
請教各位大大,因為我程式碼已經改成下面這樣,等於沒有做搜尋,但是在打每一個字時,或按倒退鍵減字,速度還是很慢,看起來應該不是seek的問題,那可能原因是甚麼.感謝
do case
case NKEYCODE = 127 && BackSpace.back a character
IF !EMPTY( THISFORM.SEARCH_STR.CAPTION )
THISFORM.SEARCH_STR.CAPTION = SUBSTR( THISFORM.SEARCH_STR.CAPTION
, 1 , LEN( THISFORM.SEARCH_STR.CAPTION ) - 1)
ENDIF
RETURN
otherwise && search data
IF
CHR(nKeyCode)$"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
THISFORM.SEARCH_STR.CAPTION = THISFORM.SEARCH_STR.CAPTION + UPPER(
CHR(nKeyCode) )
ENDIF
endcase |
|
回頂端 |
|
 |
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 8 樓
|
發表於: 星期四 十月 29, 2009 9:02 pm 文章主題: |
|
|
你有沒有試過放個messagebox或是wait windows來看看到底執行幾次
搞不好按個鍵多跑了好幾次 |
|
回頂端 |
|
 |
cgsusually67
註冊時間: 2009-10-14 文章: 41
第 9 樓
|
發表於: 星期五 十月 30, 2009 8:54 am 文章主題: 可是我測過了...... |
|
|
我按照各位前輩的指點,做了測試,譬如在程式碼中放入mesaagebix(""),以確定我按鍵盤的每個按鍵,程式到底跑了幾次,是確定只有一次,怎麼辦,.........請各位高手幫幫忙 |
|
回頂端 |
|
 |
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 10 樓
|
發表於: 星期五 十月 30, 2009 11:00 am 文章主題: |
|
|
檢查看看還有沒有其他的even在互相影響
或者是在同一個form裡面還有其他的keypress在干擾 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|