我用 //MessageBox.Show(e.X.ToString(), e.Y.ToString());//显示X坐标获取坐标值,然后在picturebox上画矩形,为什么矩形画的位置偏差好大?求大神指导,谢谢了。 if (e.X > 330 && e.X < 360 && e.Y > 140 && e.Y < 165)
{
Graphics g = Graphics.FromImage(pictureBox1.Image);
Pen mpen = new Pen(Color.Red, 4);
g.DrawRectangle(mpen,330, 140, 50, 50);
this.pictureBox1.Refresh();
}其中(330,140)和(360,165)是对应点击的鼠标值.
{
Graphics g = Graphics.FromImage(pictureBox1.Image);
Pen mpen = new Pen(Color.Red, 4);
g.DrawRectangle(mpen,330, 140, 50, 50);
this.pictureBox1.Refresh();
}其中(330,140)和(360,165)是对应点击的鼠标值.
解决方案 »
- 关于多线程操作Dictionary,很简单的代码,却令人诧异
- TCPClient和TCPServer进行通讯的问题
- 如何让我创建的excel.application不接受其它双击打开的excel文件
- 进程间通信问题
- 那里有C# xp风格的插件可以下载
- 有没有关于winform的,难度适中的中小型的例程(有源码)下载?
- 编写了一个类用来存储各种信息,类自身实现编辑的方法好,还是通过外部类实现编辑方法好呢?
- windows 下用C#来连接过Unix下DB2啊?如何做啊
- DataGridVeiw图像列跨行合并显示
- 请问关于消息传递的问题
- 【求高手指点】C#中protected用法和private用法怎么有些地方这么相同??
- c# 用 win32 api treeview 遍历
位置你都写死了,和什么偏差大?
/// 坐标缩放,返回符合图片大小的坐标
/// </summary>
/// <param name="r">画图框坐标</param>
/// <param name="x">画板宽</param>
/// <param name="y">画板高</param>
/// <param name="width">图片实际宽</param>
/// <param name="height">图片实际高</param>
/// <returns></returns>
private Rectangle ResizeRect(Rectangle r)
{
int Left = r.Left * frmBackGround.BackgroundImage.Width / frmBackGround.Width;
int Top = r.Top * frmBackGround.BackgroundImage.Height / frmBackGround.Height;
int Width = r.Width * frmBackGround.BackgroundImage.Width / frmBackGround.Width;
int Height = r.Height * frmBackGround.BackgroundImage.Height / frmBackGround.Height;
r = new Rectangle(Left, Top, Width, Height);
return r; }
,不好意思,前几天太忙了没上CSDN,请问这是怎么回事。
int Left =357 * pictureBox1.BackgroundImage.Left / pictureBox1.Width;
int Top = 192 * pictureBox1.BackgroundImage.Height / pictureBox1.Height;
int Width = 95 * pictureBox1.BackgroundImage.Width / pictureBox1.Width;
int Height = 75 * pictureBox1.BackgroundImage.Height / pictureBox1.Height;
if (e.X > 357 && e.X < 452 && e.Y > 192 && e.Y < 267) {
Graphics g = Graphics.FromImage(pictureBox1.Image);
Pen mpen = new Pen(Color.Red, 4);
g.DrawRectangle(mpen,Left, Top, Width, Height);
this.pictureBox1.Refresh();
}
你说的是这个意思吧。
注册 pictureBox1 Paint 事件
private bool drawRect = false;private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (drawRect)
{
Pen mpen = new Pen(Color.Red, 4);
e.Graphics.DrawRectangle(mpen, 330, 140, 50, 50);
}
}private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.X > 330 && e.X < 360 && e.Y > 140 && e.Y < 165)
{
drawRect = true;
this.pictureBox1.Invalidate();
}
}