C 滾動條應用總結

2021-07-09 18:32:01 字數 2329 閱讀 1783



01.窗體自動顯示滾動條

方式一(利用窗體的autoscroll屬性):

設定窗體的autoscroll屬性為true,自適應窗體上的子控制項上的布局,如果窗體內的子控制項超出了窗體的範圍,窗體就會自動出現滾動條。

方式二(利用窗體的autoscrollminsize屬性):

當窗體尺寸變小後,讓其自動顯示滾動條,只需在form1_load()函式中增加一句**:

private void form1_load(object sender, eventargs e)

註解:autoscrollminsize屬性讀取或者設定form的客戶區域或者也叫文件區域,也就是工作的區域。如果設定的區域大於form當前的大小,則窗體會自動出現滾動條。

02.繪圖時異常現象

現在窗體上繪製乙個橢圓, **如下:

private void form1_paint(object sender, painteventargs e)

程式執行結果如下圖所示,出現了不願意看到的結果。

原因:graphics物件繪製圖形時並不知道滾動條的變化情況,預設情況下它總是以「工作區左上角」為原點繪製圖形的,即它描點時的座標總是參照「工作區左上角」的。

當拖動滾動條時,也會觸發paint事件,重新繪製工作區,但系統並不重新繪製整個工作區。當滾動條向下拖動50畫素時,系統首先把工作區中的影象整體向上平移50畫素,這時工作區下部出現一塊大小為300×50畫素的空白,系統只需補上這塊空白區域即可。這種按需繪製的方式可以大大提高繪圖效率。

然而這塊空白區域縱座標範圍為150~200,正好是橢圓上半部分的位置,所以graphics物件把橢圓上半部分重新繪製了一遍,結果就出現了橢圓上半部分出現兩次的情況

所以要想正確繪製出空白區域的圖形,需要把繪圖的座標原點向上平移50畫素,而這一點可以通過座標的平移變換實現.座標平移的情況如圖2所示,要繪製從a點開始的區域,就要把座標系原點由工作區的左上角a平移到文件的左上角o,即始終使座標系的原點位於文件的左上角。這種變換可以通過下面的語句實現。

g.translatetransform(this.autoscrollposition.x, this.autoscrollposition.y);

屬性autoscrollposition表示的是滾動條的位置,滾動條移動了多少畫素,座標系就要平移多少畫素。需要注意的是,autoscrollposition.x和autoscrollposition.y均為負數,所以座標原點實際上是向左上角平移的。

改進後的**:

private void form1_paint(object sender, painteventargs e)

03.自定義控制項中新增滾動條

現在自定義乙個使用者控制項,使用者控制項在窗體上只有200 * 150 的大小。

同樣要在這個使用者控制項的矩形區域(20, 20, 300, 200)中繪製乙個橢圓,**如下:

private void form1_load(object sender, eventargs e)

public partial class usercontrol1 : usercontrol

private void usercontrol1_paint(object sender, painteventargs e)

}04.捕捉滾動條事件

過載滾動條的scroll方法即可:

private void usercontrol1_scroll(object sender, scrolleventargs e)

else if (e.scrollorientation == scrollorientation.verticalscroll)   // 垂直滾動條事件

}關於e.type:

largedecrement 滾動框移動了較長的距離。使用者在滾動條上單擊了滾動框左側(水平)或上方(垂直),或者按了 page up 鍵。

largeincrement 滾動框移動了較長的距離。使用者在滾動條上單擊了滾動框右側(水平)或下方(垂直),或者按了 page down 鍵。

smalldecrement 滾動框移動了較短的距離。使用者單擊了左(水平)或上(垂直)滾動箭頭,或者按了向上鍵。

smallincrement 滾動框移動了較短的距離。使用者單擊了右(水平)或下(垂直)滾動箭頭,或者按了向下鍵。

thumbposition  滾動框被移動。

thumbtrack  滾動框當前正在移動。

文件目錄

C 操控滾動條

region 獲取或設定滾動條位置 獲取指定滾動條中滾動按鈕的當前位置 帶有標準滾動條控制項的控制代碼 0 水平滾動條,1 垂直滾動條 dllimport user32.dll entrypoint getscrollpos private static extern intgetscrollpos...

C 視窗滾動條

ws hscroll 新增水平滾動條 ws vscroll 新增垂直滾動條 setscrollinfo 設定滾動條的範圍 setscrollpos 設定滾動條的位置 在onsize 訊息中設定 onhscroll 處理水平直滾動條訊息 onvscroll 處理垂直滾動條訊息 scrollwindow...

python橫向滾動條 控制滾動條

調過js指令碼控制 python 1.coding utf 8 2.from selenium import webdriver 3.import time 5.driver webdriver.firefox 6.driver.get 7.搜尋 8.driver.find element by i...