public partial class Form1 : Form { public Form1() { InitializeComponent(); } // The following three methods will draw a rectangle and allow // 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 = ((Control)sender).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); } }
'.Net > Winform' 카테고리의 다른 글
C# 선 위에 좌표 존재 여부 판별 (delphi 참조) (0) | 2012.11.05 |
---|---|
C# 선택 영역 색상 반전 (0) | 2012.10.29 |
C# Winform MDI(다중 문서 인터페이스)로 Form 띄우기 (0) | 2012.10.25 |
C# RichTextBox 인쇄 할 때 Font 반영 (0) | 2012.10.10 |
C# DataGridView 체크 유무 확인하기 (0) | 2012.09.25 |