2014-01-07 47 views
1

我一直在想了一會兒,一對夫婦在網上搜索答案的數週之後,編寫此我決定問如何逐漸調整一個picturebox?

所有我想要做的是逐漸從一個變量起動調整pictureBox1到設定的限制當鼠標懸停在它上面時,我得到的最遠距離是使用forloop,它立即改變大小。我想它也同時改變高度和寬度(pictureBox1將是一個正方形,我只是希望它是一個更平滑的運動位更大的廣場)

此外我需要它逐漸變回一旦鼠標移動到pictureBox1上時的原始大小。

我一直在網站上找到一些解決方案,但沒有一個似乎能正常工作,也可能需要知道我有兩種形式涉及此代碼; Form1和frmMenu,並且由於大量的錯誤,我評論了底部的兩種方法。

我沒有得到任何錯誤,但它不起作用。

public partial class frmMenu : Form 
{ 
    //private int size = 100; 

    public Timer timer1; 



    public frmMenu() 
    { 
     InitializeComponent(); 
     pictureBox1.MouseEnter += new EventHandler(pictureBox1_MouseEnter); 
     //pictureBox1.MouseLeave += new EventHandler(pictureBox1_MouseLeave); 

    } 

    private string frmMenu_Load 
    { 
     set 
     { 
      timer1.Interval = 1; 
     } 
    } 

    private void pictureBox1_MouseEnter(object sender, EventArgs e) 
    { 

     //for (int i = 140; i > size; size++) 
     //{ 
     //} 
     { 
      timer1.Interval = 1; 
     } 
     timer1.Enabled = true; 

     if (pictureBox1.Height <= 140) 
     { 
      pictureBox1.Size = new Size(pictureBox1.Size.Width, pictureBox1.Size.Height + 1); 
     } 
     else 
     { 
      timer1.Enabled = false; 
     } 

    } 




// private void pictureBox1_MouseLeave(object sender, EventArgs e) 
// { 
//  if (size > 100) 
//   for (int i = size; i > 100; i--) 
//   { 
//    size = i; 
//   } 
//  pictureBox1.Height = pictureBox1.Width = size; 
// } 

// private void pictureBox1_Click(object sender, EventArgs e) 

// { 
//  var Form1 = new Form1(); 
//  Form1.Show(); 

//  var Menu = new frmMenu(); 
//  Menu.Close(); 
// } 
} 

這是我第一次問很抱歉,如果我沒有獲得足夠的信息^^

回答

0

試試這個代碼:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace Test 
{ 
    public partial class Form1 : Form 
    { 
     bool mouseHover; 
     int width; 
     int height; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      timer1.Interval = 25; 
      timer1.Tick += timer1_Tick; 
      width = pictureBox1.Width; 
      height = pictureBox1.Height; 
      timer1.Start(); 
     } 

     void timer1_Tick(object sender, EventArgs e) 
     { 
      if (mouseHover) 
      { 
       pictureBox1.Width += (pictureBox1.Width < 100) ? 5 : 0; 
       pictureBox1.Height += (pictureBox1.Height < 100) ? 5 : 0; 
      } 
      else 
      { 
       pictureBox1.Width += (pictureBox1.Width > width) ? -5 : 0; 
       pictureBox1.Height += (pictureBox1.Height > height) ? -5 : 0; 
      } 
     } 

     private void pictureBox1_MouseEnter(object sender, EventArgs e) 
     {    
      mouseHover = true; 
     } 

     private void pictureBox1_MouseLeave(object sender, EventArgs e) 
     { 
      mouseHover = false; 
     } 
    } 
} 

您可以調整的時間間隔你怎麼樣它,但每25毫秒水平/垂直增加5個像素非常平滑。您需要設置初始高度和寬度,以便在鼠標離開圖片框後再回到該大小。我使用空合併運算符,因此您不必停止計時器。只要?左側的條件爲真,它將評估爲:左側的值。當條件爲假時,它將評估:的右側。

+1

非常感謝,我忘了添加新的事件處理程序和計時器,但之後它完美地工作! – ThomasIS123