在C#的pictureBox中获取鼠标点击位置

3

我正在尝试获取图片框上的鼠标点击坐标,并将信息放入文本框中。

我能够在表单中获取鼠标点击坐标,但是我无法在图片框中获取鼠标坐标(当我在图片框中点击时没有任何反应)。我查看了stackoverflow上类似问题的答案,但似乎没有适用于我的情况。

以下是完整的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testGraphiqueCSharp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnMouseClick(MouseEventArgs e)
        {
            base.OnMouseClick(e);
            textBox1.Text = e.X.ToString();
            textBox2.Text = e.Y.ToString();
        }

       private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            textBox1.Text = e.X.ToString();
            textBox2.Text = e.Y.ToString();
            Console.WriteLine("mouse up");
        }
    }
}

你的代码在我的电脑上运行正常。 - Jageen
5个回答

4
private void pictureBox1_Click(object sender, EventArgs e)
{
    var mouseEventArgs = e as MouseEventArgs;
    if (mouseEventArgs != null) textBox1.Text = "X= " + mouseEventArgs.X + " Y= " + mouseEventArgs.Y;
}

1
谢谢!最初我无法转换鼠标事件...上述方法解决了这个问题!! - shivi

3
您的代码在我的电脑上完美运行。
请确保事件实际被调用,可以通过放置调试点来检查。
这是相同的图像。
UI部分
enter image description here


代码部分
enter image description here

输出(当我点击图片时)
enter image description here


我在pictureBox1_MouseUp事件中放置了Console.WriteLine("mouse up");消息,但这从未显示在输出窗口中!似乎从未调用此事件!为什么?!? - Eric

1
将pictureBox1_MouseUp替换为以下内容。
private void pictureBox1_Click(object sender, EventArgs e)
{
    MouseEventArgs eM = (MouseEventArgs)e;
    textBox1.Text = eM.X.ToString();
    textBox2.Text = eM.Y.ToString();
    Console.WriteLine("mouse up");
}

1
当鼠标松开时,您已经调用了该函数。您应该在单击图片框时调用该函数。尝试使用类似tapped的事件来完成任务。

0

这对我有用。我把这段代码放在窗体的构造函数中。

pictureBox1.MouseClick += (s, e) => MessageBox.Show(String.Format("Mouse Clicked at X: {0} Y: {1}", e.X, e.Y));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接