2017-12-29 16 views
0

画像ボックスがあり、マウスの現在位置を取得し、2つのラベルに分けて保存します。 そして私はマウスに新しい位置を設定するためのボタンを持っていますが、位置が正しくないのです。最後の位置からマウスの位置を正しく設定しないvb net

これは私が使用するコードです=私は X = 399、Y = 237

を取得しかし、私はこの場所にマウスの位置を設定するためのボタンをクリックしたときに、私は のx = 175 yのを取得しますxとyを取得します

Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick 
    PPoint = New Point(e.X, e.Y) 
    Label8.Text = e.X 
    Label9.Text = e.Y 
End Sub 

をそして、これは私がマウス

Private Sub Button8_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button8.Click 
    Cursor.Position = PPoint 
End Sub 
に新しい位置を設定するために使用するコードです

私はやり方を変えようとしましたが、私は同じ問題を続けます。 Tisは私が試したコードですFind Mouse Position

+0

PPointを "PPoint = PointToScreen(New Point(e.X、e.Y))"に置き換え、役立つかどうかを確認するためにPictureBox1_MouseClickを試してください。 PictureBoxの座標は0,0ピクチャボックスの左上にあります。 Cursor.Positionは画面の座標を使用します.0,0は画面の左上隅です。 – Aaron

+0

@Aaronあなたの助けをあなたにタンクします。 –

+0

@Aaron私はあなたの変更とそのより近いものを試してみましたが、それはまだ正しくありませんでしたが、私がやったことはありませんでしたが、ポジションは正しいポジションを維持し続けています –

答えて

0

これは、あなたがクリックした正確な点に赤い点を付けます。ボタンをクリックした後にマウスを動かすことになりますが(誤ってかどうかに関わらず)、カーソルの位置をどのように設定すれば便利なのでしょうか。

カーソル位置の設定はスクリーン座標にする必要があります。これは、描画のためにクライアント座標に変換されます。 PointToClientがカーソル位置に必要であるとは思わない。以下のコードでは、不要な変換です。クライアント座標に戻るだけです。私は、それぞれの変換の例を示すためにそれを残しました。そのため、あなたはそれらを試すことができます。

Public Class Form1 
Private PPoint As Point 
Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 
    PictureBox1.BackColor = Color.White 
    PictureBox1.BorderStyle = BorderStyle.Fixed3D 
    AddHandler PictureBox1.MouseClick, AddressOf PictureBox1_MouseClick 
    AddHandler Button8.Click, AddressOf Button8_Click 
    ' Add any initialization after the InitializeComponent() call. 

End Sub 

Private Sub Button8_Click(sender As Object, e As EventArgs) 
    Dim g As Graphics = PictureBox1.CreateGraphics() 
    Dim rect As New Rectangle(PictureBox1.PointToClient(PPoint), New Size(1, 1)) 
    g.DrawRectangle(Pens.Red, rect) 
End Sub 

Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) 
    PPoint = PictureBox1.PointToScreen(New Point(e.X, e.Y)) 
    Label8.Text = PPoint.X.ToString() 
    Label9.Text = PPoint.Y.ToString() 

End Sub 
End Class 
+0

これはテストしましたか?フォームのPointToScreen()メソッドを使用していますが、e.Xとe.Yはpboxのクライアント領域を基準にしているため、必ずPictureBox1.PointToScreen()を使用することになりました。 –

+0

私はそれを中断しませんでした。私はそれを開始し、それは動作します。あなたは正しいですが、私はそれを更新します。 – Aaron

+0

@Aaron Tanksはこのエラーをソートするのに役立つ完璧なタンクです –

関連する問題