大侠 我收先向你致敬! 发招了! 我做windform 用户控件 继承UserControl!
在控见上使用UserControl1_Paint 重绘控件上的图案! 现在要求控件上的图案是可以拖动的
我已经在UserControl1_MouseMove判定好了边界!
1:怎么才能实现拖动恩
2:拖动的时候有重影子要怎么消除
在控见上使用UserControl1_Paint 重绘控件上的图案! 现在要求控件上的图案是可以拖动的
我已经在UserControl1_MouseMove判定好了边界!
1:怎么才能实现拖动恩
2:拖动的时候有重影子要怎么消除
先用个虚线框,最后mousedown的时候再把图案画上去。可以使用双缓冲。
// drawn using the corner coordinates of Button3, which are first
// converted to screen coordinates.
private void Button3_MouseHover(object sender, System.EventArgs e)
{
ControlPaint.DrawReversibleLine(Button3.PointToScreen(
new Point(0, 0)), Button3.PointToScreen(
new Point(Button3.ClientRectangle.Right,
Button3.ClientRectangle.Bottom)), SystemColors.Control);
ControlPaint.DrawReversibleLine(Button3.PointToScreen(
new Point(Button3.ClientRectangle.Right,
Button3.ClientRectangle.Top)),
Button3.PointToScreen(new Point(Button1.ClientRectangle.Left,
Button3.ClientRectangle.Bottom)), SystemColors.Control);
}// When the mouse moves from Button3, the reversible lines are erased by
// using the same coordinates as are used in the Button3_MouseHover method.
private void Button3_MouseLeave(object sender, System.EventArgs e)
{
ControlPaint.DrawReversibleLine(Button3.PointToScreen(
new Point(0, 0)), Button3.PointToScreen(
new Point(Button3.ClientRectangle.Right,
Button3.ClientRectangle.Bottom)), SystemColors.Control);
ControlPaint.DrawReversibleLine(Button3.PointToScreen(
new Point(Button3.ClientRectangle.Right,
Button3.ClientRectangle.Top)),
Button3.PointToScreen(new Point(Button3.ClientRectangle.Left,
Button3.ClientRectangle.Bottom)), SystemColors.Control);
}
// the user to use the mouse to resize the rectangle. If the
// rectangle intersects a control's client rectangle, the
// control's color will change.bool isDrag = false;
Rectangle theRectangle = new Rectangle
(new Point(0, 0), new Size(0, 0));
Point startPoint;private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{ // Set the isDrag variable to true and get the starting point
// by using the PointToScreen method to convert form
// coordinates to screen coordinates.
if (e.Button==MouseButtons.Left)
{
isDrag = true;
} Control control = (Control) sender; // Calculate the startPoint by using the PointToScreen
// method.
startPoint = control.PointToScreen(new Point(e.X, e.Y));
}private void Form1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)
{ // If the mouse is being dragged,
// undraw and redraw the rectangle as the mouse moves.
if (isDrag) // Hide the previous rectangle by calling the
// DrawReversibleFrame method with the same parameters.
{
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed); // Calculate the endpoint and dimensions for the new
// rectangle, again using the PointToScreen method.
Point endPoint = this.PointToScreen(new Point(e.X, e.Y));
int width = endPoint.X-startPoint.X;
int height = endPoint.Y-startPoint.Y;
theRectangle = new Rectangle(startPoint.X,
startPoint.Y, width, height); // Draw the new rectangle by calling DrawReversibleFrame
// again.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed);
}
}private void Form1_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)
{ // If the MouseUp event occurs, the user is not dragging.
isDrag = false; // Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle,
this.BackColor, FrameStyle.Dashed); // Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for(int i = 0; i < Controls.Count; i++)
{
controlRectangle = Controls[i].RectangleToScreen
(Controls[i].ClientRectangle);
if (controlRectangle.IntersectsWith(theRectangle))
{
Controls[i].BackColor = Color.BurlyWood;
}
} // Reset the rectangle.
theRectangle = new Rectangle(0, 0, 0, 0);
}