91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Winform 讓PictureBox有滾動條并響應滾輪和拖動事件

發布時間:2020-08-02 19:30:04 來源:網絡 閱讀:9829 作者:arthurshan 欄目:編程語言

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

現在運行起來查看大圖片就會出現滾動條了,但是你會發現鼠標滾輪不管用。看來我們還要加入一些代碼來支持鼠標滾輪。我們可以利用Form上的MouseWheel事件來處理這個事情,只是進行一下區域判斷,如果鼠標在Panel的區域內則改變Panel的垂直滾動數值即可。

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方法可以將其轉化為屏幕坐標,以屏幕左上角為0,0來計算的。同樣的將Panel的顯示區域的坐標也轉化為屏幕坐標,接下來就是判斷一下當前的鼠標是否在Panel的顯示區域就好了。


但是滾輪只能改變垂直滾動條,如果你還想更完美一些支持鼠標拖動來同時改變水平和垂直滾動條的話。還需要在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有滾動條并響應滾輪和拖動事件

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

濉溪县| 栾城县| 来凤县| 噶尔县| 沾益县| 彝良县| 义马市| 安泽县| 宁夏| 犍为县| 平湖市| 奎屯市| 京山县| 霍林郭勒市| 商丘市| 东乡族自治县| 云安县| 密云县| 葫芦岛市| 昭平县| 灵山县| 遵义县| 长武县| 玉溪市| 当雄县| 施秉县| 桂东县| 莱西市| 沛县| 高阳县| 黔西县| 东兰县| 闽清县| 鸡东县| 湟源县| 福安市| 镇江市| 汉川市| 九龙城区| 咸宁市| 财经|