C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 58 を表示中)
■32931 / )  Re[1]: 左ボタンが押された状態でのMouseMoveイベントキャッチ
□投稿者/ 魔界の仮面弁士 (997回)-(2009/02/17(Tue) 21:38:44)
No32923 (たこやき さん) に返信
> そうした場合通常は、別のコントロールのMouseMoveイベントが機能しませんが、
> それを機能させるにはどうしたらいいのでしょうか。

別のコントロールの MouseMove 発動中、元コントロール(aaa)の MouseMove も発動されねばなりませんか?
それとも、その座標にあるコントロールに対してのみ MouseMove が発生すれば良いのでしょうか?


とりあえず、Capture プロパティを false にするという案。


public partial class Form1 : Form
{
 private aaa ctrl;
 public Form1()
 {
  InitializeComponent();
  ctrl = new aaa();
  ctrl.Size = new Size(100, 100);
  Controls.Add(ctrl);
  ctrl.MouseMove += new MouseEventHandler(ctrl_MouseMove);
 }

 void ctrl_MouseMove(object sender, MouseEventArgs e)
 {
  listBox1.Items.Insert(0, "aaa - " + e.Location.ToString());
 }

 private void panel1_MouseMove(object sender, MouseEventArgs e)
 {
  listBox1.Items.Insert(0, "panel1 - " + e.Location.ToString());
 }

 private void panel1_MouseEnter(object sender, EventArgs e)
 {
  panel1.BackColor = Color.Yellow;
 }

 private void panel1_MouseLeave(object sender, EventArgs e)
 {
  panel1.BackColor = Color.Empty;
 }
}

class aaa : Control
{
 protected override void OnMouseMove(MouseEventArgs e)
 {
  base.Capture = false; //★
  base.OnMouseMove(e);
 }
 protected override void OnPaintBackground(PaintEventArgs pevent)
 {
  base.OnPaintBackground(pevent);
  using (Pen p = new Pen(Color.Blue, 2))
  {
   p.Alignment = PenAlignment.Inset;
   pevent.Graphics.DrawRectangle(p, pevent.ClipRectangle);
  }
 }
}
返信 編集キー/


管理者用

- Child Tree -