真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Winform讓PictureBox有滾動條并響應(yīng)滾輪和拖動事件-創(chuàng)新互聯(lián)

.Net提供的PictureBox控件當圖片大于顯示區(qū)域時沒有滾動條供滾動查看。不過好在這個功能可以很簡單的通過Panel來實現(xiàn)。我們需要使用一個Panel來裝PictureBox,再將Panel的AutoScroll設(shè)置為True,PictureBox的SizeMode設(shè)置為AutoSize。這樣PictureBox的大小就由圖片來決定了,而當PictureBox的大小超過了Panel時就會出現(xiàn)滾動條了(來自于Panel)。但值得注意的是不要將PictureBox控件Dock在Panel上,不然不會出現(xiàn)滾動條,只要將PictureBox的Location設(shè)置為0,0即可。Dock在父容器上時寬高就由父容器決定了,這和我們想要的AutoSize是相悖的,其實微軟控件的一些屬性是相悖的,但是在設(shè)計器中并沒有體現(xiàn)出來而是在運行時體現(xiàn),這就給我們帶來了不少的困惑,需要慢慢的總結(jié)。

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的滄縣網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

現(xiàn)在運行起來查看大圖片就會出現(xiàn)滾動條了,但是你會發(fā)現(xiàn)鼠標滾輪不管用??磥砦覀冞€要加入一些代碼來支持鼠標滾輪。我們可以利用Form上的MouseWheel事件來處理這個事情,只是進行一下區(qū)域判斷,如果鼠標在Panel的區(qū)域內(nèi)則改變Panel的垂直滾動數(shù)值即可。

private void mainForm_MouseWheel(object sender, MouseEventArgs e)
{
    // get screen point
    Point mousePoint = _mainForm.PointToScreen(e.Location);
    // whether in panel
    if (this.pnlImage.RectangleToScreen(this.pnlImage.ClientRectangle).Contains(mousePoint))
    {
        this.pnlImage.AutoScrollPosition = new Point(this.pnlImage.HorizontalScroll.Value, pnlImage.VerticalScroll.Value - e.Delta);
    }
}

e.Location就是鼠標在form中的位置,以窗口左上角為0,0來計算的。通過PointToScreen方法可以將其轉(zhuǎn)化為屏幕坐標,以屏幕左上角為0,0來計算的。同樣的將Panel的顯示區(qū)域的坐標也轉(zhuǎn)化為屏幕坐標,接下來就是判斷一下當前的鼠標是否在Panel的顯示區(qū)域就好了。

但是滾輪只能改變垂直滾動條,如果你還想更完美一些支持鼠標拖動來同時改變水平和垂直滾動條的話。還需要在PictureBox的MouseDown、MouseMove和MouseUp上來做點事情。大體的思路就是在MouseDown時記住一個坐標,在MouseMove時用當前坐標和記住的坐標進行比較從而得知鼠標的變化方向,并以此來改變滾動條的位置。

private Point _startLocation;
private void pbImage_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        _startLocation = e.Location;
        Cursor = Cursors.SizeAll;
    }
}
private void pbImage_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        int xOffset = _startLocation.X - e.X;
        int yOffset = _startLocation.Y - e.Y;
        this.pnlImage.AutoScrollPosition = new Point(this.pnlImage.HorizontalScroll.Value + xOffset, pnlImage.VerticalScroll.Value + yOffset);
    }
}
private void pbImage_MouseUp(object sender, MouseEventArgs e)
{
    Cursor = Cursors.Default;
}

如果你有更好的解決方案歡迎留言。Winform 讓PictureBox有滾動條并響應(yīng)滾輪和拖動事件

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁標題:Winform讓PictureBox有滾動條并響應(yīng)滾輪和拖動事件-創(chuàng)新互聯(lián)
本文路徑:http://weahome.cn/article/ddhsoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部