.NET中Form.AutoScrollPosition的運用
2024-07-10 12:58:50
供稿:網(wǎng)友
 
今天拿c#寫了一個支持滾動的圖片顯示程序(winform程序),主要運用form的autoscroll,代碼很簡單,關(guān)鍵代碼如下:/// <summary>/// form的load事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void form1_load(object sender, system.eventargs e){   //這個很關(guān)鍵,只有該屬性為true時,窗口才會在控件超出窗口范圍時    //自動添加滾動條,并在我們操作滾動條時,自動滾動控件    this.autoscroll = true;}/// <summary>/// 設(shè)置一個圖片文件到picturebox1上/// </summary>/// <param name="filename">圖片文件名</param>private void setimage(string filename){    bitmap bm = new bitmap(filename);    picturebox1.backgroundimage = bm;        graphicsunit bmgu = graphicsunit.pixel;    rectanglef rectf = bm.getbounds(ref bmgu);    //設(shè)置picturebox1的大小和位置。如果該控件超出form的范圍,form會自動    //添加滾動條    picturebox1.setbounds(0, 0, (int)rectf.width, (int)rectf.height);}/// <summary>/// picturebox1的dobuleclick事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void picturebox1_doubleclick(object sender, system.eventargs e){    //打開一個文件對話框選擇圖片文件    openfiledialog openfiledialog = new openfiledialog();    openfiledialog.filter = "image files|*.bmp;*.jpg;.jpeg;*.gif";    if(openfiledialog.showdialog() == dialogresult.ok)    {        //設(shè)置要顯示的圖片        setimage(openfiledialog.filename);    }} 運行一下,似乎很正常,雙擊picturebox1,打開一個圖片文件,如果圖片尺寸過大,會自動出現(xiàn)滾動條。只是有一種情況,先打開一個大圖片,然后拖動滾動條到最后,然后再打開一圖片,圖片顯示的位置就出錯了(不是顯示在左上角)。奇怪了,我明明設(shè)置了picturebox1的x y為0了啊:picturebox1.setbounds(0, 0, ……)真是很費解!! 經(jīng)過艱苦地攻讀framework幫助文件,終于找出原因,現(xiàn)在和大家分享:原來當(dāng)我們改變了窗口的滾動條的位置后,窗口客戶區(qū)的坐標原點就發(fā)生了變化,和原來的坐標原點的偏移量可以用form.autoscrollposition表示。既然問題找到了,解決就很簡單,修改setimage函數(shù)的最后一句代碼為:picturebox1.setbounds(autoscrollposition.x, autoscrollposition.y, (int)rectf.width, (int)rectf.height);就一切ok了!!