MouseWheel Event Fire - PullRequest
       23

MouseWheel Event Fire

0 голосов
/ 13 мая 2010

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

Для дальнейшего объяснения я помещаю пример кода, который отображает значение 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());
    }
}

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

1 Ответ

2 голосов
/ 13 мая 2010

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

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

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

`

...