2016-11-23 13 views
1

.NETクラス "Panel"から継承したpersonnalクラスにイベントハンドラを追加しようとしました。ランタイム時にクラスにMouseDownイベントとMouseMoveイベントを追加します。

私はそれを行うには、いくつかのいくつかの方法を試してみましたが、それは私が他のパネルが含まれている主なパネルを持っている...もう

を働いていません。それはGrafcetを設計することです。

だから私はパネルを継承私のクラス「エタップ」があります。

class Etape : Panel 
    { 
     private Point MouseDownLocation; 

     private void Etape_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       MouseDownLocation = e.Location; 
       this.BackColor = CouleurSelect; 
       MessageBox.Show("Bonjour"); 
      } 
     } 

     private void Etape_MouseMove(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       this.Left = e.X + this.Left - MouseDownLocation.X; 
       this.Top = e.Y + this.Top - MouseDownLocation.Y; 
      } 
     } 
    } 

をそして、私はそのように宣言します。

toto = new Etape(); 
toto.BackColor = Color.White; 
toto.BorderStyle = BorderStyle.FixedSingle; 
toto.Width = 40; 
toto.Height = 40; 

「TOTOは、」私の「主」パネルに追加されその後。 実行時にパネルを移動するためにEventhandlerを追加したいと思います。上記のコードを試しましたが、C#ではEtapeをクリックしていることを検出できません。

私を助けるアイデアがありますか?

ジュリアンは

答えて

2

あなたはOnMouseXXXメソッドをオーバーライドする必要があります。

class Etape : Panel 
{ 
    private Point MouseDownLocation; 

    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     base.OnMouseDown(e); 

     if (e.Button == MouseButtons.Left) 
     { 
      MouseDownLocation = e.Location; 
      this.BackColor = CouleurSelect; 
      MessageBox.Show("Bonjour"); 
     } 
    } 

    protected override void OnMouseMove(MouseEventArgs e) 
    { 
     base.OnMouseMove(e); 

     if (e.Button == MouseButtons.Left) 
     { 
      this.Left = e.X + this.Left - MouseDownLocation.X; 
      this.Top = e.Y + this.Top - MouseDownLocation.Y; 
     } 
    } 
} 

はちょうどそれまで何をフックしない Etape_MouseMove()と呼ばれる方法を宣言します。

+0

おかげであなたの助けのためにたくさんの機能をフックする必要があります。それが私の必要なものです! 私は「Etape_MouseMove()というメソッドを宣言するだけでは、それまで何もフックしていません」と覚えています。 –

0

あなたがイベントに

class Etape : Panel 
    { 
     public Etape() 
     { 
      MouseDown += Etape_MouseDown; 
      MouseMove += Etape_MouseMove; 
     } 

     private Point MouseDownLocation; 

     private void Etape_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       MouseDownLocation = e.Location; 
       this.BackColor = CouleurSelect; 
       MessageBox.Show("Bonjour"); 
      } 
     } 

     private void Etape_MouseMove(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       this.Left = e.X + this.Left - MouseDownLocation.X; 
       this.Top = e.Y + this.Top - MouseDownLocation.Y; 
      } 
     } 
    } 
関連する問題