none
C#2008 获取点击PictureBox控件时在PictureBox中的坐标值 RRS feed

  • 问题

  • 如题,C#2008 获取点击PictureBox控件时在PictureBox中的坐标值,需要把这个坐标值传递给其他函数使用,谢谢!我需要的是在PictureBox控件里的坐标值

    我需要先给出个提示消息,确定之后再点击图像,但是这个过程怎么才可以使程序等待我点击PictureBox控件呢?我尝试用了MouseClick()事件,但是不行。

    2010年8月19日 14:33

答案

  • private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
      int originalWidth = this.pictureBox1.Image.Width;
      int originalHeight = this.pictureBox1.Image.Height;
    
      PropertyInfo rectangleProperty = this.pictureBox1.GetType().GetProperty("ImageRectangle", BindingFlags.Instance | BindingFlags.NonPublic);
      Rectangle rectangle = (Rectangle)rectangleProperty.GetValue(this.pictureBox1, null);
    
      int currentWidth = rectangle.Width;
      int currentHeight = rectangle.Height;
    
      double rate = (double)currentHeight / (double)originalHeight;
    
      int black_left_width = (currentWidth == this.pictureBox1.Width) ? 0 : (this.pictureBox1.Width - currentWidth) / 2;
      int black_top_height = (currentHeight == this.pictureBox1.Height) ? 0 : (this.pictureBox1.Height - currentHeight) / 2;
    
      int zoom_x = e.X - black_left_width;
      int zoom_y = e.Y - black_top_height;
    
      double original_x = (double)zoom_x * rate;
      double original_y = (double)zoom_y * rate;
    
      StringBuilder sb = new StringBuilder();
    
      sb.AppendFormat("原始尺寸{0}/{1}(宽/高)\r\n", originalWidth, originalHeight);
      sb.AppendFormat("缩放状态图片尺寸{0}/{1}(宽/高)\r\n", currentWidth, currentHeight);
      sb.AppendFormat("缩放比率{0}\r\n", rate);
      sb.AppendFormat("左留白宽度{0}\r\n", black_left_width);
      sb.AppendFormat("上留白高度{0}\r\n", black_top_height);
      sb.AppendFormat("当前鼠标坐标{0}/{1}(X/Y)\r\n", e.X, e.Y);
      sb.AppendFormat("缩放图中鼠标坐标{0}/{1}(X/Y)\r\n", zoom_x, zoom_y);
      sb.AppendFormat("原始图中鼠标坐标{0}/{1}(X/Y)\r\n", original_x, original_y);
    
      this.label1.Text = sb.ToString();
    }
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 pucx 2010年8月31日 13:21
    2010年8月30日 14:51
    版主

全部回复

  • 你好!

    MouseClick 事件中事件参数 MouseEventArgs 中可以获取 X,Y 坐标。

     

    private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
    {
     // 点击时记录坐标
     int x = e.X;
     int y = e.Y;
    
     if (MessageBox.Show("你确定吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
     {
      // 执行你的方法,无须模拟鼠标动作
      // YourMethod(x,y);
     }
    }
    

     

     


    知识改变命运,奋斗成就人生!
    2010年8月19日 16:23
    版主
  • 但是我需要的是先提示我点击鼠标,确定之后我再点击PictureBox控件。不是点击之后在确定啊,因为是做在一个菜单下,我点击菜单之后需要有提示我才点击了。

    2010年8月19日 16:35
  • musemove事件判断坐标,提示tooltip
    http://feiyun0112.cnblogs.com/
    2010年8月20日 2:24
    版主
  • 但是这个仍然不是我所希望和需要的啊?麻烦各位帮我解答下,谢谢!
    2010年8月23日 7:53
  • 你再把你的问题说清楚点吧!这样才好帮助你。
    知识改变命运,奋斗成就人生!
    2010年8月23日 8:03
    版主
  • 我的想法是这样的,我在窗体中有一个PictureBox控件,我需要获取我鼠标点击这个控件时的坐标值,但是这个坐标值的话我又想转换为这个控件中图像的图像坐标值,也就是图像的x,y值。我这个PictureBox控件的sizemode属性设置为zoom方式,请问该怎么样才可以实现呢?有没有好的解决办法呢?

    2010年8月30日 7:44
  • 如果你是想将点击缩放后图片的坐标转值转换为图片正常尺寸的坐标值,那么你需要将图片的缩放比例算出来就行了。正常值 = 图片绽放状态的坐标值 * 缩放比例


    知识改变命运,奋斗成就人生!
    2010年8月30日 8:38
    版主
  • 但是如果我这个图片不是恰好的正常缩放情况下填充满整个PictureBox控件的话,那怎么知道这个坐标转换到图片上去的坐标值呢?还有就是这个图片的缩放比例改怎么样获得呢?谢谢
    2010年8月30日 8:43
  • 当前显示的尺寸/图片原始尺寸=绽放比例。如果图片正好用原始尺寸显示在 picturebox 中,那么缩放比例为 1。
    知识改变命运,奋斗成就人生!
    2010年8月30日 8:53
    版主
  • 但是这个当前显示的尺寸怎么获取呢?如果我获取图片的width和height那是原始大小了?但如果获取PictureBox的大小的话,如果图片缩放后不是完全填充PictureBox控件空间的话那怎么获得图片大小呢?谢谢!
    2010年8月30日 12:58
  • private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
      int originalWidth = this.pictureBox1.Image.Width;
      int originalHeight = this.pictureBox1.Image.Height;
    
      PropertyInfo rectangleProperty = this.pictureBox1.GetType().GetProperty("ImageRectangle", BindingFlags.Instance | BindingFlags.NonPublic);
      Rectangle rectangle = (Rectangle)rectangleProperty.GetValue(this.pictureBox1, null);
    
      int currentWidth = rectangle.Width;
      int currentHeight = rectangle.Height;
    
      double rate = (double)currentHeight / (double)originalHeight;
    
      int black_left_width = (currentWidth == this.pictureBox1.Width) ? 0 : (this.pictureBox1.Width - currentWidth) / 2;
      int black_top_height = (currentHeight == this.pictureBox1.Height) ? 0 : (this.pictureBox1.Height - currentHeight) / 2;
    
      int zoom_x = e.X - black_left_width;
      int zoom_y = e.Y - black_top_height;
    
      double original_x = (double)zoom_x * rate;
      double original_y = (double)zoom_y * rate;
    
      StringBuilder sb = new StringBuilder();
    
      sb.AppendFormat("原始尺寸{0}/{1}(宽/高)\r\n", originalWidth, originalHeight);
      sb.AppendFormat("缩放状态图片尺寸{0}/{1}(宽/高)\r\n", currentWidth, currentHeight);
      sb.AppendFormat("缩放比率{0}\r\n", rate);
      sb.AppendFormat("左留白宽度{0}\r\n", black_left_width);
      sb.AppendFormat("上留白高度{0}\r\n", black_top_height);
      sb.AppendFormat("当前鼠标坐标{0}/{1}(X/Y)\r\n", e.X, e.Y);
      sb.AppendFormat("缩放图中鼠标坐标{0}/{1}(X/Y)\r\n", zoom_x, zoom_y);
      sb.AppendFormat("原始图中鼠标坐标{0}/{1}(X/Y)\r\n", original_x, original_y);
    
      this.label1.Text = sb.ToString();
    }
    

    知识改变命运,奋斗成就人生!
    • 已标记为答案 pucx 2010年8月31日 13:21
    2010年8月30日 14:51
    版主