2011年12月29日 星期四

#VB ScrollBar 限制範圍

1.按下 Scroll 向下鍵
2.觸發設定 FirstDisplayedScrollingRowIndex
3.引發 OnScroll 事件





请问怎样用sendmessage函数向VSCROLL滚动条控件发送滚动的消息?





窗 口 的 自 动 滚 动

透過SendMessage控制功能表項





How To AutoScroll a DataGridView during Drag and Drop


How to detect if a scrollbar is or is not at the end of a richtextbox (vb.net)

========================================================
感覺是因為FirstDisPlayedRowIndex 改變
才引發 Scroll 事件
所以沒辦法單方面改 OnScroll
應該去限制 FirstDisPlayedRowIndex 的最大值
要查看看有沒有辦法

當到達底端,
設定移動變量 = 0
向上移動時,
在設定移動變量 = default

應該可以透過 Reflection 來做
Dim verticalOffset As Reflection.PropertyInfo
verticalOffset = Me.GetType().GetProperty("VerticalScrollingOffset", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
verticalOffset.SetValue(Me, 0, nothing)

抓到映射屬性,但是沒辦法 setValue 
發生
找不到屬性集方法。






                        '判斷是否索引屬性,若params.length = 0 表示該屬性非索引屬性
                        'Dim params = verticalOffset.GetIndexParameters
                        'For Each p As Reflection.ParameterInfo In params
                        '    MsgBox("   Parameter: " & p.Name)
                        'Next



============================================================
不知道為什麼 製令製造書的FirstDisPlayedRowIndex 總是呈現的資料比實際變數抓到的大 1
大致上可以限制了
但是畫面還是可以向下推移,
看能不能限制說當到了限制位置後,ScrollBar的向下或向上就失效


感覺跟FirstDisPlayedRowIndex 比較有關係
看能不能透過事件什麼的,限制FirstDisPlayedRowIndex 只能在設定的最大值以下


你怎麼能做出一個項目的DataGridView滾動一次使用鼠標輪?

這邊可以做到,但是變成說要去寫 MouseWheel事件
keyDown事件
還要去寫ScrollBar持續按下向下箭頭控件事件
都要做類似事情,才有可能不再向下
Cell在編輯狀態下 KeyDown 事件

或是要再查查看其他方法

或是透過WinProc來改寫 {UP},{Down}
1.去判斷是否已經到達最大值
2.持續送出{DOWN},將會無視=>不做任何動作
=========================================================================
碰到說DataGridView資料的垂直捲動軸,當往下拉到底,會拉超過GridView顯示的範圍
變成多出空白行


平行的捲動軸就沒有這個問題


這會造成我在新增資料烈的時候,
因為改變Cell數值造成重新資料鏈結
產生焦點Cell跑掉的問題


看能不能限制垂直捲動軸捲動到最後一筆資料列之後,就無法再向下
(預設可以=>多出空白)





目前透過設定FirstDisplayedScrollingRowIndex去找
應該要限制的Maximum


卡在怎麼抓到正確的原始Maximum


再向上移動的時候,去還原原始Maximum
當又遇到FirstDisplayedScrollingRowIndex時候
再去限制Maximum


再想想
===========================================================



感覺要自訂,去寫出每次變動的量,
然後判斷是不是value到了max
限制value只能到max~0
目前透過row重繪之後,
去判斷最後一筆資料出來了沒
出來了就把焦點限制在最後一筆資料顯示的頁面之上
FirstDisplayedScrollingRowIndex


看能不能之後鎖住Scroll不能再向下拉動只能向上




不然就看能不能委派自訂事件
附加在GridView Scroll事件之下
每次變動,檢查是不是超過max
並且指定只能<=MAX
=======================================================
可以在Gridview的Scroll事件之下
限制e.newValue的數值
去做到控制滾動軸位置的方式(畫面會閃爍)

卡在怎麼抓限制的數值,以及滾動的座標?

可能要計算 Scroll.Max 跟 Gridview.height 之間

@改變max似乎只是改變scrollbar的移動量
並不是絕對位置,而是相對位置


VB.NET DataGridView SCrollBar鎖定



在Scroll事件中如何计算窗口内的row值






Value的范围是从Minimum到Maximum+1-LargeChange, 
你可以根据这个来计算Maximum, 
因为你不需要Value=Maximum就可以完成你的操作。



沒有留言:

張貼留言