2016-02-18 32 views
1

Im捕獲一個flowLayoutPanel中的Scroll事件,其中包含一組控件(文本框)。如果我用鼠標移動滾動條,滾動事件被正確捕獲。但是,如果從控件跳轉到使用Tab鍵進行控制並且滾動條移動以給出文本框焦點,則不會引發事件。 在這種情況下我可以做什麼,無論滾動修改如何,我都需要捕獲。如何在不涉及鼠標的情況下捕獲滾動事件?

我上傳了一個簡單的項目,其中可以顯示的問題http://1drv.ms/1UabHkv

回答

1

您正在尋找的GotFocus事件。還有一個LostFocus事件。 它適用於點擊,標籤,SHIFT +選項卡,等等

textBox1.GotFocus += textBox1_ScrollEvent; 

其中textBox1_ScrollEvent是滾動

+0

,但使用的是我將要訂閱到每個GotFocus事件針對的是FlowLayoutPanel的內部,然後在該代碼驗證,如果滾動已移動的每個文本框。我認爲這是過分的,必須有一個更清潔的方法。如果在合理的時間內找不到方法,我會把它作爲答案。 – mjsr

+1

正如我所說,由於沒有找到替代品,我使用了這種方法。希望這不會減慢表單的行爲。謝謝 – mjsr

0

我不認爲你要綁定到正確的事件的事件處理程序。爲ScrollableControl.Scroll Event狀態文檔:

在滾動事件發生時通過客戶端區域中的用戶滾動通過與滾動條互動,或者當用戶控制和主動控制滾動到視圖之間導航。當您編寫代碼時,Scroll事件也會發生,例如設置AutoScrollPosition屬性,滾動客戶區。

編輯: 這似乎是在MS文檔確實是不正確。我已經使用您的示例項目和我創建的示例項目進行了測試,並且我遇到了Scroll事件未在選項卡或甚至鼠標滾輪上觸發的相同行爲。

看起來最好的行動方式是實施自己的滾動條,併爲您的Panel關閉Autoscroll

見MROE以下信息,以問題:How to use ScrollableControl with AutoScroll set to false

+0

描述是美麗的,現實是不同的。我正在使用該事件,並且真實的行爲與此不符。 – mjsr

+0

你能提供你的代碼,以便它可以被複制嗎? –

+0

當然,讓我第二次抓住什麼是重要的 – mjsr

相關問題