台灣最大程式設計社群網站
線上人數
1134
 
會員總數:242749
討論主題:187707
歡迎您免費加入會員
討論區列表 >> C# >> textbox該如何失去焦點
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
textbox該如何失去焦點
價值 : 200 QP  點閱數:169 回應數:7

樓主

studycode
門外漢
0 32
1195 66
發送站內信

windows form 設置了多個textbox,
每輸入完資料若點下一個textbox,原本這個textbox會失去焦點而引發leave事件,
但如果我不是點其他textbox,而是點例如panel還是label...,
原本的textbox焦點會一直都在,造成leave事件都不執行,
由於我是需要資料輸入完後查資料庫,所以不能用textChanged或keyPress事件,
否則太頻繁呼叫資料庫了。

請問有辦法解決焦點問題嗎??還是我這種狀況其實有其他更好的方式?



搜尋相關Tags的文章: [ textbox ] , [ leave ] , [ 焦點 ] , [ focus ] ,
本篇文章發表於2018-07-04 15:16
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

春天
檢舉此回應
試試看配合
TextBox.MouseLeave

本篇文章回覆於2018-07-04 18:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

春天
檢舉此回應
另外我以前的解法是設一個Timer,超過一定時間未改變TextBox.Text時就查詢資料庫

Timer設個0.3秒
然後textChanged 時若Timer未啟動就啟動,已啟動就重置(停止之後再啟動)Timer
查詢資料庫的時候就停止Timer
本篇文章回覆於2018-07-04 18:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

小魚
檢舉此回應
在Panel增加滑鼠點擊事件,
將Focus移到其他控制項上面.
這樣可以嗎?
本篇文章回覆於2018-07-05 12:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

studycode
檢舉此回應
*試了MouseLeave,但只要user滑鼠經過就啟動事件,也會造成頻繁呼叫資料庫~~
*哈~竟能想到設timer這種方式啊!但我的狀況可能不適用,若user打字慢的話,會抓未完成的textbox的值去查資料庫,這樣會查出錯誤資料

*我也試了panel增加click事件,將focus移到別的控制項,這個可以,不過就是有點麻煩,因為不能預期user會點哪邊,表單裡很多panel、label、groupbox....,每一項都得設定click事件,若日後表單要再增加控制項,也要記得再加clicl事件

謝謝二位,看起來好像還沒有適合的方式><
煩啊~小小的textbox Focus問題,竟然這麼難處理...
本篇文章回覆於2018-07-06 09:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Ader Chen
檢舉此回應

其它控制項取得焦點時, 原來的控制項才會引發 Leave、LostFocus 等事件,
而 panel、label 等控制項並不會取得焦點,
個人覺得不必拘泥於花費太多時間去想如何破解上述規則,
不如單純點, 當使用者輸入 Enter 就進行動作,
畢竟當鍵盤輸入後按 Enter 或 Tab 的動作, 比輸入後移動滑鼠點選其它控制項的動作簡便.
程式舉例:

僅供參考
本篇文章回覆於2018-07-06 11:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

Ader Chen
檢舉此回應

Oops, C#...

本篇文章回覆於2018-07-06 11:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

studycode
檢舉此回應
好吧,不麻煩自己了,就處理user按enter或tab才去執行~~~~~^^
謝謝!
本篇文章回覆於2018-07-09 09:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.