ProblemYou want to reposition the cursor (that is, the mouse pointer) programatically. SolutionSample code folder: Chapter 14\MoveMouse Modify the Position property of the System.Windows.Forms. Cursor object with a new System.Drawing.Point containing the new location. DiscussionCreate a new Windows Forms project, and add two Button controls named Button1 and Button2. Now add the following code to the form's class: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Windows.Forms.Cursor.Position = New Point( _ Me.PointToScreen(Button2.Location).X + _ Button2.Width / 2, _ Me.PointToScreen(Button2.Location).Y + _ Button2.Height / 2) End Sub When you run the program and click on Button1, the cursor centers itself over Button2. All controls on a form use the client coordinate system for their positions. Each control's X and Y locations are based on the upper-left corner of the form's client area, the rectangle that is just inside of the form's border. The cursor, however, is a screen-wide resource, and it uses the coordinates for the entire screen, with its X and Y positions offset from the upper-left corner of the screen. To move the cursor based on a screen position, you must translate between the two coordinate systems. The form includes two methods to perform this translation: PointToScreen(), which converts a client rectangle location to a matching screen location, and PointToClient(), which translates in the opposite direction. Actually, every control on the form also includes these two methods. However, all points translated using a control's translation methods are based on the upper-left corner of the control (that is, on its client area), and not on the upper-left corner of the form's client rectangle. |