2010-05-13 4 views
0

У меня проблема с вызовом моего частного метода в событии MouseWheel. Фактически мое событие колеса мыши срабатывает должным образом, когда я только увеличиваю переменную или отображаю что-то в строке заголовка и т. Д. Но когда я хочу вызвать частный метод, этот метод вызывается только один раз, и это не требование, которое я хочу назвать метод, зависящий от скорости прокрутки, т. е. когда прокрутка выполняется один раз, вы медленно вызываете частный метод один раз, но когда прокрутка выполняется с высокой скоростью, вызовите частный метод более одного раза в зависимости от скорости прокрутки.MouseWheel Event Fire

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

public partial class Form1 : Form 
{ 
    ListBox listBox1 = new ListBox(); 
    int i = 0; 

    public Form1() 
    { 
     InitializeComponent(); 

     // Settnig ListBox control properties 
     this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
        | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right))); 
     this.listBox1.FormattingEnabled = true; 
     this.listBox1.Location = new System.Drawing.Point(13, 13); 
     this.listBox1.Name = "listBox1"; 
     this.listBox1.Size = new System.Drawing.Size(259, 264); 
     this.listBox1.TabIndex = 0; 

     // Attaching Mouse Wheel Event 
     this.listBox1.MouseWheel += new MouseEventHandler(Form1_MouseWheel); 

     // Adding Control 
     this.Controls.Add(this.listBox1); 
    } 

    void Form1_MouseWheel(object sender, MouseEventArgs e) 
    { 
     i++; 
     this.Text = i.ToString(); 
     this.listBox1.Items.Add(i.ToString());    

     // Uncomment the following line to call the private method 
     // this method gets called only one time irrelevant of the 
     // mouse wheel scroll speed. 
     // this.LaunchThisEvent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.listBox1.Select(); 
    } 

    private void LaunchThisEvent() 
    { 
     // Display message each time 
     // this method gets called. 
     MessageBox.Show(i.ToString()); 
    } 
} 

Как позвонить частному методу более одного раза в зависимости от скорости прокрутки колеса мыши?

ответ

2

Вы можете попробовать использовать MouseEventArgs.Delta поле, чтобы вычислить количество вызовов:

 int timesToCall = Math.Abs(e.Delta/120); 

     for (int k = 0; k < timesToCall; ++k) 
     { 
      this.LaunchThisEvent(); 
     } 

`

+0

Таким образом timesToCall достигает максимум до 2, но если вы только дисплей значение I ИНТ в строке заголовка оно намного больше почти 6 –

+0

Ну, я просто попробовал с измененным кодом, в котором времяToCall отображается в строке заголовка, и я получил 6. Это действительно зависит от скорости вращения колеса. –

+0

А также, если вы измените строку, которая добавляет записи в список, чтобы показать значение Delta, вы увидите много записей, таких как 360, 480 и т. Д. Это, конечно, на моем компьютере и на мышке отличается. –