2009-01-22 69 views
-1

我有一個多行文本框和它下面的一個按鈕。WinForms多行文本框,Enter鍵堅持將焦點移出文本框

VB.NET,的WinForms,.NET 2.0

System.Windows.Forms.Textbox

多行=真

AcceptsReturn =真

AcceptsTab =假

的CausesValidation =假

無事件s顯式編碼。

我希望Enter鍵插入換行符,並且不要將焦點移動到下一個控件(按鈕)。

我希望Tab鍵始終將焦點移動到Tab鍵順序中的下一個控件(按鈕)。

相反,Enter鍵將插入一個換行符,然後將焦點移動到下一個控件(按鈕)。它也使用Ctrl-Enter做到了這一點,這真讓我感到困惑!

通過閱讀幫助文件和廣泛的使用Google,它應該以我需要的方式工作。 但顯然我錯過了一些東西。我究竟做錯了什麼?

+0

我想看到這個項目,這是不可思議。將其發佈到文件共享服務。 – 2009-01-22 03:06:54

+0

你是否繼承了一些自定義表單?也許這個基本形式的過程輸入鍵來關注下一個控件 – 2009-01-22 04:06:03

回答

0

原來,我已經忘記了,我有這個(下)做了同樣的表格上其他地方:

'http://duncanmackenzie.net/blog/Enter-Instead-of-Tab/default.aspx 
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs) 
    If e.KeyCode = Keys.Enter Then 
     e.Handled = True 
     Me.ProcessTabKey(Not e.Shift) 
    Else 
     e.Handled = False 
     MyBase.OnKeyUp(e) 
    End If 
End Sub 
0

它絕對不應該這樣做。我唯一能想到的是它沒有足夠的高度來容納多條線。嘗試添加...

textBox1.ScrollBars = ScrollBars.Vertical 

如果不是我不知道。嘗試創建一個空白的項目,並創建一個文本框,一個按鈕設置屬性,看看會發生什麼...一個表格...

2

我經常用這種問題的方法是迭代地添加和減去代碼,直到我可以將其縮小到導致問題的一件事。例如,你可能從一個非常簡單的項目開始,只用一個編輯框和一個其他控件,看看它做了什麼。如果此代碼按照您希望的方式工作,那麼您可以開始逐個添加代碼,讓簡單的項目越來越接近預期的最終產品,直到出現錯誤。然後看看你添加的代碼的最後一部分,看看你是否可以減去那些代碼,直到bug消失。迭代這幾次可能會幫助你找到罪魁禍首。或者,你可以從你現有的(行爲不端)代碼開始,並開始簡化它,直到bug消失。然後你添加你刪除的最後一件東西的一部分,並按照上面的方法迭代。

最後,在這種情況下,您還可以嘗試爲編輯控件的Leave事件添加事件處理程序,並在處理程序中放置斷點。當BP命中時,請檢查callstack並查看是否能夠了解哪些代碼促成了焦點更改。爲此,您的調試器可能需要配置爲顯示您沒有源代碼的代碼(即,在調試器中禁用「只是我的代碼」選項)。如果你想讓團隊幫助解密它,你甚至可以將一個(修剪過的)callstack粘貼到問題中。

p.s.有沒有人有上述迭代調試方法的名稱?如果不是的話,我可以建議把它稱爲牛頓法(或者牛頓法),因爲它類似於牛頓法來迭代地找到數學函數的根。

相關問題