2014-02-07 2 views
0

У меня есть этот код:Как запустить среднюю кнопку мыши в событии мыши?

public void globalPbsMouseEnterEvent(object sender, System.EventArgs e) 
     { 
      if (e.Button == MouseButtons.Middle) 
      { 
       MessageBox.Show("hi"); 
      } 
      PictureBox p = sender as PictureBox; 
      pb.SizeMode = PictureBoxSizeMode.StretchImage; 
      if (file_array != null) 
      { 
       if (file_array.Length > 0) 
       { 
        for (int i = 0; i < file_array.Length; i++) 
        { 
         if (p == pbs[i]) 
          pb.Animate(file_array[i]); 
        } 
       } 
      } 
      pb.Visible = true; 
      pb.BringToFront(); 
      leave = true; 

     } 

Но e.Button не существует кнопка не существует как свойство для й

Это код в конструкторе Form1, где я сделать экземпляр для глобального ввода события , Переменная ЗФР является массив AnimatedPictureBoxs:

pbs = new AnimatedPictureBox.AnimatedPictureBoxs[8]; 
      progressbars = new ProgressBar[8]; 
      for (int i = 0; i < pbs.Length; i++) 
      { 
       progressbars[i] = new ProgressBar(); 
       progressbars[i].Size = new Size(100, 10); 
       progressbars[i].Margin = new Padding(0, 0, 0, 70); 
       progressbars[i].Dock = DockStyle.Top; 
       pbs[i] = new AnimatedPictureBox.AnimatedPictureBoxs(); 
       pbs[i].MouseEnter += globalPbsMouseEnterEvent; 
       pbs[i].MouseLeave += globalPbsMouseLeaveEvent; 
       pbs[i].Tag = "PB" + i.ToString(); 
       pbs[i].Size = new Size(100, 100); 
       pbs[i].Margin = new Padding(0, 0, 0, 60); 
       pbs[i].Dock = DockStyle.Top; 
       pbs[i].SizeMode = PictureBoxSizeMode.StretchImage; 
       Panel p = i < 4 ? panel1 : panel2; 
       p.Controls.Add(pbs[i]); 
       p.Controls.Add(progressbars[i]); 
       pbs[i].BringToFront(); 
       progressbars[i].BringToFront(); 
      } 

Это код в классе AnimatedPictureBox:

using System; 
using System.Windows.Forms; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using DannyGeneral; 

namespace WeatherMaps 
{ 
    class AnimatedPictureBox 
    { 
     //Use this custom PictureBox for convenience 
     public class AnimatedPictureBoxs : PictureBox 
     { 
      public static bool images; 
      List<string> imageFilenames; 
      Timer t = new Timer(); 
      public AnimatedPictureBoxs() 
      { 
       images = false; 
       AnimationInterval = 10; //It's up to you, the smaller, the faster. 
       t.Tick += Tick_Animate; 
      } 
      public int AnimationInterval 
      { 
       get { return t.Interval; } 
       set { t.Interval = value; } 
      } 
      public void Animate(List<string> imageFilenames) 
      { 
       this.imageFilenames = imageFilenames; 
       t.Start(); 
      } 
      public void StopAnimate() 
      { 
       t.Stop(); 
       i = 0; 
      } 
      int i; 
      private void Tick_Animate(object sender, EventArgs e) 
      { 
       if (images == true) 
       { 
        imageFilenames = null; 
       } 
       if (imageFilenames == null) 
       { 
        return; 
       } 
       else 
       { 
        try 
        { 
         if (i >= imageFilenames.Count) 
         { 
          i = 0; 
         } 
         else 
         { 

          Load(imageFilenames[i]); 
          i = (i + 1) % imageFilenames.Count; 

         } 
        } 
        catch (Exception err) 
        { 

         Logger.Write(err.ToString()); 

        } 
       } 
      } 
     } 
    } 
} 

Что я хочу сделать, это когда пользователь нажимает среднюю кнопку мыши будет пауза анимация, и когда он снова щелкнет по средней кнопке мыши, анимация будет продолжена.

Но в событии globalenter e dosent есть свойство Button.

+0

И среднюю кнопку мыши событие click должно быть активировано, когда я вхожу в одно из изображений, например, в globalPbsMouseEnterEvent – user3200169

+0

Вам нужно 'MouseEventArgs'. Как их получить - это еще один вопрос. – user1306322

ответ

1

В вашем коде, а именно здесь

public void globalPbsMouseEnterEvent(object sender, System.EventArgs e) 
{ 
    if (e.Button == MouseButtons.Middle) 
    { 
     MessageBox.Show("hi"); 
    } 
.................... 
} 

Вы не можете сделать это на самом деле MouseEnter нужно использовать MouseDown, MouseWheel [например], чтобы иметь MouseEventArgs

public void globalPb_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.MiddleButton = MouseButtonState.Pressed) 
    { 
     MessageBox.Show("hi"); 
    } 
.................... 
} 
Смежные вопросы