Im捕獲一個flowLayoutPanel中的Scroll事件,其中包含一組控件(文本框)。如果我用鼠標移動滾動條,滾動事件被正確捕獲。但是,如果從控件跳轉到使用Tab鍵進行控制並且滾動條移動以給出文本框焦點,則不會引發事件。 在這種情況下我可以做什麼,無論滾動修改如何,我都需要捕獲。如何在不涉及鼠標的情況下捕獲滾動事件?
我上傳了一個簡單的項目,其中可以顯示的問題http://1drv.ms/1UabHkv
Im捕獲一個flowLayoutPanel中的Scroll事件,其中包含一組控件(文本框)。如果我用鼠標移動滾動條,滾動事件被正確捕獲。但是,如果從控件跳轉到使用Tab鍵進行控制並且滾動條移動以給出文本框焦點,則不會引發事件。 在這種情況下我可以做什麼,無論滾動修改如何,我都需要捕獲。如何在不涉及鼠標的情況下捕獲滾動事件?
我上傳了一個簡單的項目,其中可以顯示的問題http://1drv.ms/1UabHkv
您正在尋找的GotFocus事件。還有一個LostFocus事件。 它適用於點擊,標籤,SHIFT +選項卡,等等
textBox1.GotFocus += textBox1_ScrollEvent;
其中textBox1_ScrollEvent
是滾動
我不認爲你要綁定到正確的事件的事件處理程序。爲ScrollableControl.Scroll Event狀態文檔:
在滾動事件發生時通過客戶端區域中的用戶滾動通過與滾動條互動,或者當用戶控制和主動控制滾動到視圖之間導航。當您編寫代碼時,Scroll事件也會發生,例如設置AutoScrollPosition屬性,滾動客戶區。
編輯: 這似乎是在MS文檔確實是不正確。我已經使用您的示例項目和我創建的示例項目進行了測試,並且我遇到了Scroll
事件未在選項卡或甚至鼠標滾輪上觸發的相同行爲。
看起來最好的行動方式是實施自己的滾動條,併爲您的Panel
關閉Autoscroll
。
見MROE以下信息,以問題:How to use ScrollableControl with AutoScroll set to false
,但使用的是我將要訂閱到每個GotFocus事件針對的是FlowLayoutPanel的內部,然後在該代碼驗證,如果滾動已移動的每個文本框。我認爲這是過分的,必須有一個更清潔的方法。如果在合理的時間內找不到方法,我會把它作爲答案。 – mjsr
正如我所說,由於沒有找到替代品,我使用了這種方法。希望這不會減慢表單的行爲。謝謝 – mjsr