Горячая, чтобы получить позицию курсора относительно верхнего левого угла элемента управления? - PullRequest
2 голосов
/ 19 февраля 2010

Когда я нажимал на элемент управления,

Как получить позицию курсора относительно левого верхнего угла элемента управления (winforms)?

C #, VS 2005

PS: Я спрашиваю в контексте подсказки "show" метод, которому нужны эти координаты ..

Ответы [ 3 ]

5 голосов
/ 19 февраля 2010

Это мой код для установки всплывающих подсказок для составного элемента управления, может дать вам подсказку (светодиодные производные от UserControl):

    public LED()
    {
        InitializeComponent();
        m_Image = global::AdvAdmittance.Controls.Properties.Resources.ledgray_small;
        m_ToolTip = new ToolTip();
        m_ToolTip.AutoPopDelay = 5000;
        m_ToolTip.InitialDelay = 1000;
        m_ToolTip.ReshowDelay = 500;
        m_ToolTip.ShowAlways = true;
        m_LedPictureBox.MouseHover += new EventHandler(m_LedPictureBox_MouseHover);
        m_LedPictureBox.MouseLeave += new EventHandler(m_LedPictureBox_MouseLeave);
        m_LedPictureBox.Click += new EventHandler(m_LedPictureBox_Click);
    }

    void m_LedPictureBox_MouseHover(object sender, EventArgs e)
    {
        if (m_ToolTipText != string.Empty)
        {
            Point toolTipPoint = this.Parent.PointToClient(Cursor.Position);
            toolTipPoint.Y -= 20;
            m_ToolTip.Show(m_ToolTipText, this.Parent, toolTipPoint);
        }
    }

    void m_LedPictureBox_MouseLeave(object sender, EventArgs e)
    {
        m_ToolTip.Hide(this.m_LedPictureBox);
    }
2 голосов
/ 19 февраля 2010

Ааа, спасибо за ответ.

Все, что мне нужно, это метод PointToClient.

Надеюсь (может быть) это будет полезно другим людям, вот "мой" код.

Я взял почти весь код из http://support.microsoft.com/kb/322634 и изменил три строки:

   void treeView1_MouseMove(object sender, MouseEventArgs e)
    {
        // Get the node at the current mouse pointer location.
        TreeNode theNode = this.treeView1.GetNodeAt(e.X, e.Y);

        // Set a ToolTip only if the mouse pointer is actually paused on a node.
        if ((theNode != null))
        {
            // Verify that the tag property is not "null".
            if (theNode.Tag != null)
            {
                // Change the ToolTip only if the pointer moved to a new node.
                if (theNode.Tag.ToString() != this.toolTip1.GetToolTip(this.treeView1))
                {
                    //this.toolTip1.SetToolTip(this.treeView1, theNode.Tag.ToString());
                    Point c = System.Windows.Forms.Cursor.Position;
                    Point p = treeView1.PointToClient(c);
                    this.toolTip1.Show(theNode.Tag.ToString(), treeView1, p);
                }
            }
            else
            {
                this.toolTip1.SetToolTip(this.treeView1, "");
            }
        }
        else     // Pointer is not over a node so clear the ToolTip.
        {
            this.toolTip1.SetToolTip(this.treeView1, "");
        }
    }
...