我有一个面板,上面有多个图片框。当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
}
}