2012-04-17 77 views
3

我用下面的代碼將焦點設置到文本字段字段設置焦點:Compact Framework的3.5文本不工作

public void setFieldInFocus(TabPage tabPage) 
    { 
     foreach (Control t in tabPage.Controls) 
     { 
      if (t is TextBox) 
      { 
       if (t.Name == fieldInFocus) 
       { 
        t.Focus();    

       } 
      } 

     } 

    } 

然而,當我嘗試使用手機輸入文字光標顯示在文本框中鍵盤沒有任何反應,直到我點擊文本字段,即使光標已經在文本字段中。然後我點擊文本字段,然後嘗試使用手機鍵盤輸入文本,它可以工作。爲什麼我仍然需要點擊文本框才能輸入文字?我能做些什麼來解決這個問題?

請注意,我使用緊湊框架3.5和textField.Select();不可用。

謝謝

+0

是否有可能包含您的文本框的窗口實際上沒有焦點? – yms 2012-04-17 15:28:04

+0

我嘗試將焦點設置到窗口,但是我失去了文本框的焦點。因此我使用tabindex = 0來設置所需的文本框,但是我仍然遇到同樣的問題。顯示消息框後出現問題。 – user1338726 2012-04-18 05:51:31

+1

在我的應用程序中,我首先設置了「Form」或「Panel」控件的Focus,然後設置「TextBox」控件的焦點。適用於我。 – jp2code 2012-04-18 12:54:17

回答

1

什麼時候你發佈的代碼段執行?是否在表單實際顯示之前?如果是這樣,.NET運行時將覆蓋您的手動焦點設置並將其更改爲表單上的第一個可調焦控件。

即使光標出現在文本框內,它可能不是具有焦點的控件。

我認爲不理想的一種解決方案是在表單加載事件觸發時啓用一個非常短的時間間隔(例如10)來在表單上放置一個計時器。在timer_tick處理程序中,禁用計時器(確保它只運行一次),然後執行您的代碼片段。以這種方式執行代碼可確保Windows消息泵有機會完全加載並顯示錶單(並在執行它的默認焦點例程的過程中)之前您的焦點覆蓋代碼執行。

緩解此問題的更好方法是嘗試設計您的表單,使您的文本框成爲第一個可對焦的項目。默認情況下,表單將以深度優先的方式迭代它的子控件樹,並且一旦找到可控焦點的控件,它就會關注並控制它。

如果你看看設計師代碼文件爲您的形式,嘗試手動調整,所以你保證:

  1. 文本框是第一控制添加到選項卡頁面
  2. 的標籤頁是第一個控件添加到選項卡控件
  3. tabcontrol是添加到表單的第一個控件。

當這三件事情是真的時,默認情況下,文本框將首先關注,並且您不必運行任何其他代碼來覆蓋它。

希望這會有所幫助。

相關問題