как заставить события мыши работать как цикл - PullRequest
0 голосов
/ 02 июля 2011

Мне нужно реализовать три типа событий мыши в последовательности. Каждое событие мыши разрешено только определенное количество раз. Итак, я инициализировал переменную и поставил ее так:

int a = 0;
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
     if (a < 2)
     {
          // a little code here  
          //this makes mouse up to work for 2 times.
     }
}
private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if (a > 1 && a <= 3)
    {


                c[f] = e.X;
                d[f] = e.Y;
                a++;
                f++;


    } 
}    
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
    if (a > 3 && a < 11)
    {
        //some more code
        //this makes MouseClick to work for 7 times
    }
}

Теперь я хочучтобы снова запустить два последних события, когда я когда-нибудь нажму кнопку. Пожалуйста, дайте мне несколько идей, как заставить их запускаться снова.

Я пытался реализовать это, но не получилось.

private void button2_Click(object sender, EventArgs e)
{
    a = 2;// I thought it would set a=2 and the MouseDoubleClick would be implemented but my assumption proved to be wrong.
}

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Вы можете просто явно вызывать методы Event, передавая нулевые значения:

private void button2_Click(object sender, EventArgs e)
{
    a = 2;
    pictureBox1_MouseClick(null,null);
    pictureBox1_MouseDoubleClick(null,null);

}

private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if(a > 1 && a <=3)
    {
        if(e!=null)
        {
            c[f] = e.X;
            d[f] = e.Y;
            a++;
            f++;
        }
    }
}

Это предотвратит возникновение ошибки, но когда метод события вызывается из метода button2_Click, он на самом деле ничего не сделает, так какзначения для eX и eY будут нулевыми.

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

2 голосов
/ 02 июля 2011

Вы можете специализировать любой объект, с которого вы слушаете события. В вашем случае объект PictureBox, я думаю. Для удобства принято создавать защищенные виртуальные методы для трансляции событий. Это позволяет переопределять и добавлять дополнительное поведение при возникновении событий.

Например:

public class FooPicbox : PictureBox {

   protected override void OnMouseDown( MouseEventArgs e ) {
      base.OnMouseDown( e );
      /* Insert code here */
      /* Example: */
      base.OnMouseUp( e );
      base.OnMouseClick( e );
   }
}

Затем, когда происходит событие MouseDown, оно также передает два других события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...