2013-06-05 124 views
0

我在某些面板內部有一些TextBoxes。對於那些文本框,我設置了一個Enter事件函數。單擊面板內的TextBox觸發多次輸入事件

private void TextBox_Enter(object sender, EventArgs e) 
{ 
    TextBox tBox = sender as TextBox; 
    tBox.HideSelection = false; 
    tBox.SelectAll(); 
    tBox.HideSelection = true; 
} 

我這樣做是爲了讓用戶可以進入或點擊文本框並開始輸入。現在,我已經成功地以其他形式完成了這項工作。我現在的問題是,出於某種原因,使用Enter事件將它們放入面板螺絲中。

在代碼中插入一個斷點表明事件被觸發多次,在20或30年代的某個地方。我也有一個Leave事件,但不會觸發,只有Enter事件。這隻發生在面板內時。

TextBoxes被設置爲TabStops並具有不同的TabIndex。

現在,我知道什麼是造成它,但不是爲什麼。如果我刪除了tBox.HideSelection,我可以輸入文本框而不觸發Enter事件多次。不知道爲什麼代碼會在面板中搞砸,因爲代碼的工作原理與面板之外的意圖一樣。

任何幫助,將不勝感激。謝謝。

+0

這很重要約爲** hideselection護理**? ..爲什麼不只是tBox.SelectAll? – matzone

+0

@matzone他希望不僅通過切換選項卡,而且通過單擊文本框來選擇所有的文本框文本。我試過了代碼,當點擊文本框時,如果只有SelectAll(),則不會選擇文本。 –

+0

@GarryVass不,我沒有設置處理屬性。 EventArgs沒有像KeyEventArgs這樣的Handled屬性。我只用EventArgs怎麼做? – Natzely

回答

1

嘗試......

Dim lFocused as Boolean 

Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus 
     TextBox1.SelectAll() 
     lFocused = True 
End Sub 

Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave 
     lFocused = False 
    End Sub 

Private Sub TextBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseUp 
    lFocused = True 
    TextBox1.SelectAll() 
End Sub 

Based idea

+0

那麼,正如代碼所示,它擺脫了閃爍和多重觸發器,但沒有突出顯示文本。我通過刪除Enter事件做了一些代碼修改。我認爲問題在於Enter事件首先發生,並將LFocused設置爲true,所以當鼠標事件檢查它時,它不會做選擇。無論如何,我認爲Enter事件並不是必須的,因爲當你插入一個TextBox的時候,文本已經被高亮顯示了,所以我只需要在鼠標點擊它時突出顯示。 – Natzely

+0

@Natzely:我不明白它,因爲我已經用VS 2005測試過它,它的工作..和你的文本框將不會select.all文本,如果它通過鼠標點擊獲得焦點..但代碼沒有! – matzone

+0

我有點困惑,爲什麼SelectAll()在沒有HideSelection的MouseUp事件中工作,但沒有在Enter事件中工作。 – Natzely