绘制的对象未绘制正确的位置

时间:2014-03-24 22:47:53

标签: c# winforms

我正在尝试制作一个绘画程序,除了我有一个主要问题,我想绘制一个正方形,我点击鼠标,除了形状没有绘制在正确的位置,这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Paint_Program
{
    public partial class Form1 : Form
    {

        int mousex;
        int mousey;

        public Form1()
        {
            InitializeComponent();



        }

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            mousex = Cursor.Position.X;
            mousey = Cursor.Position.Y;
            System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
            System.Drawing.Graphics formGraphics;
            formGraphics = this.CreateGraphics();
            formGraphics.FillRectangle(myBrush, new Rectangle(mousex, mousey, 20, 20));
            myBrush.Dispose();
            formGraphics.Dispose();


        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void rectangleShape1_Click(object sender, EventArgs e)
        {

        }

        private void Test_Click(object sender, EventArgs e)
        {
            //testing 
            Console.WriteLine("X:" + mousex);
            Console.WriteLine("Y: " + mousey);
        }
    }
}

我真的很想知道如何解决这个问题,如果有人帮助我,我会很高兴:D

3 个答案:

答案 0 :(得分:1)

问题是有两组坐标,一组是整个屏幕的坐标,另一组是你试图绘制的控件的坐标。你需要在这两组坐标之间进行转换。看一下COntrol类中的PointToScreen方法:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.pointtoscreen(v=vs.110).aspx

答案 1 :(得分:1)

在您的代码中,您使用Coursor.Position属性,该属性在屏幕坐标中提供光标位置:

http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position(v=vs.110).aspx

您感兴趣的是光标相对于窗口的坐标。在您的事件处理程序中,您可以使用MouseEventArgs e

之类的new Rectangle(e.X, e.Y, 20, 20)方法参数轻松访问它

我认为Form1_MouseClick事件处理程序的修改版本低于您的预期:

private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        mousex = Cursor.Position.X;
        mousey = Cursor.Position.Y;
        System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
        System.Drawing.Graphics formGraphics;
        formGraphics = this.CreateGraphics();
        formGraphics.FillRectangle(myBrush, new Rectangle(e.X, e.Y, 20, 20));
        myBrush.Dispose();
        formGraphics.Dispose();
    }

答案 2 :(得分:0)

位置与您的主屏幕有关,(0,0)是主屏幕的左上角,您想要的是您正在绘制的控件的鼠标位置:

例如: Panel1.MousePosition;