想做一个简单的的(c#)基于ie内核的浏览器,在显示鼠标在窗体上的坐标时候遇到了一个问题。
现在使用的代码如下:private static Point pt;
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            pt.X = Control.MousePosition.X;
            pt.Y = Control.MousePosition.Y;
            this.Labell.Text = "(" + Convert.ToString(this.Top) + "," + Convert.ToString(this.Left) + ")";
        }
在空的Form的情况下,是可以正常的显示出鼠标在窗体上的坐标位置的。
但是如果From上面放了其它的控件,如一个webBorwser,鼠标在From的空白区域可以获取到坐标值,鼠标如果放到webBorwser上,就显示不出来相对于窗体的坐标了。希望高手解答

解决方案 »

  1.   

    webBorwser_MouseMove事件也加这段代码
      

  2.   

    webBorwser_MouseMove事件也加这段代码
    --------------------------------------
    哪有这个事件.......楼主的贴子发了两次。
      

  3.   

    没有这个事件的,而且不可能放一个控件就加一个Move吧,网络有点卡,发了2次。只要有正确答案,2个贴都给100分。
      

  4.   

            public Form1()
            {
                InitializeComponent();            CatchMouseMove(this);
            }        private void CatchMouseMove(Control ctrl)
            {
                ctrl.MouseMove += new MouseEventHandler(Form1_MouseMove);
                foreach(Control ctrl1 in ctrl.Controls)
                    CatchMouseMove(ctrl1);
            }        private static Point pt;        private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                pt.X = Control.MousePosition.X;
                pt.Y = Control.MousePosition.Y;
                this.Labell.Text = "(" + Convert.ToString(this.Top) + "," + Convert.ToString(this.Left) + ")";        }
      

  5.   

    1.记录Form的左上角(PointToScreen方法)屏幕坐标;
    2.获取鼠标坐标Controls.MousePosition,然后将其也转换为屏幕坐标;
    3.将2和1的坐标进行运算,得到鼠标位置相对于Form的工作区坐标;
      

  6.   

    目前这种我都是很偷懒,直接hook鼠标,可能因为一直在用hook吧,所以这些问题都不怎么考虑
      

  7.   

    用Control.MousePosition.X(或e.Location.X) + (sender as Control).Location.X 不就行了
      

  8.   

    [DllImport("user32.dll")]  
      static   extern   bool   ClientToScreen(IntPtr   hWnd,ref   Point   lp);  
       
      private   void   Form1_MouseMove(object   sender,System.Windows.Forms.MouseEventArgs   e)  
      {  
      bool   tmp;  
      Point   lpoint=new   Point(e.X,e.Y);  
      lpoint.X=e.X;  
      lpoint.Y=e.Y;  
       
      textBox1.Text=e.X.ToString()+","+e.Y.ToString();  
       
      tmp=ClientToScreen(this.Handle,ref   lpoint);  
       
      textBox2.Text=lpoint.X.ToString()+","+lpoint.Y.ToString();  
      }   
      

  9.   

    看这样能达到你想要的效果不  private void Form1_Load(object sender, EventArgs e)
            {
         Timer _Timer = new Timer();
                _Timer.Interval = 1;
                _Timer.Tick += new EventHandler(_Timer_Tick);
                _Timer.Enabled = true;
            }        void _Timer_Tick(object sender, EventArgs e)
            {
                Point _Point =this.PointToClient(Cursor.Position);
                Control _SubControl = this.GetChildAtPoint(_Point);            if (_SubControl == null)
                {
                    this.Text = "Form" + _Point.ToString();
                }
                else
                {
                    this.Text = _SubControl.Name + _SubControl.PointToClient(Cursor.Position).ToString();
                }
            }