在其上创建一个矩形鼠标选择区域面板,其中包含多个Picturebox

时间:2015-02-11 07:01:04

标签: c# .net wpf picturebox flowlayoutpanel

我有一个面板,上面有多个图片框。当MouseLeft按钮关闭并拖动鼠标时,我想在面板和Picturebox上创建一个矩形。我理解矩形鼠标选择区域可以通过Panel上的Mousedown和Picturebox和Panel上的MouseMove事件的组合来创建。

现在我的实现是,当我在Panel上收到Mousedown事件时,我保存Mousedown Location并查找MouseMove事件。如果mousemove事件在面板上,我在面板上绘制一个矩形,如果Mouse Move事件在Picturebox上,我开始为该Picturebox挖掘矩形。

现在的问题是,当mouseleft按钮关闭并且鼠标移动在面板上完成时,我能够在它上面接收mousemove事件并在面板上绘制矩形。但是我没有收到Picturebox的任何MouseMove事件来为它创建矩形选区。

我的实施是否正确,有人可以为此提出解决方案吗?

我正在发布我的代码片段以供参考。

代码:

//Panel Class

public partial class Childwindow : Form
    {
     //Mouse down event
  private void ClickEventOnchildForm(object sender, MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Left)
        {
            RectStartPoint = e.Location;
            IsSelecting = true;
            Invalidate();
         }
     }

   //Mouse Move event
    private void flowLayoutPanel1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button != MouseButtons.Left)
                return;

            Point tempEndPoint = e.Location;
            Rect.Location = new Point(
                Math.Min(RectStartPoint.X, tempEndPoint.X),
                Math.Min(RectStartPoint.Y, tempEndPoint.Y));
            Rect.Size = new Size(
                Math.Abs(RectStartPoint.X - tempEndPoint.X),
                Math.Abs(RectStartPoint.Y - tempEndPoint.Y));

            this.flowLayoutPanel1.Invalidate();
        }

     //Paint event
   private void flowLayoutPanel1_Paint_1(object sender, PaintEventArgs e)
        {
            if (Rect != null && Rect.Width > 0 && Rect.Height > 0)
            {
                e.Graphics.FillRectangle(selectionBrush, Rect);
            }
        }
}

Public class Picturebox: UserControl{

 private void picbox_MouseMove(object sender, MouseEventArgs e)
        {//Higlight particular Picturebox
        }
}

0 个答案:

没有答案