C#根据鼠标位置获取控件名称
开发环境:C# 2008 WinFrom
在一个窗体上放置了若干个Panel控件,每个Panel控件中又放置axShockwaveFlash控件(播放flash的控件)
需要实现的目标:
用户从IE或其他浏览器里面拖动flash到axShockwaveFlash控件上,则这个axShockwaveFlash播放拖过来的flash。
问题:
因为axShockwaveFlash是没有DragDrop事件和DragEnter事件的,因此我需要判断拖过来后鼠标松开是当前鼠标所在控件的名称,即根据当前point获取控件的名称,请问我该如何做?谢谢!
------解决方案--------------------沙發,不太懂,幫忙頂下。高手解答。。
------解决方案--------------------试着提出一种比较笨的方法。
使用Form来捕捉鼠标事件,可以获得鼠标在Form上的具体坐标,然后遍历所有axShockwaveFlash控件获取矩形轮廓,判断鼠标坐标是否落在矩形中。
------解决方案--------------------C# code
private void frmACTest_Load(object sender, EventArgs e)
{
this.capture = true;//使用窗口捕捉鼠标移动时间
}
private void frmACTest_MouseMove(object sender, MouseEventArgs e)
{
Point point = this.PointToScreen(new Point(e.X,e.Y));
Rectangle rc = this.button1.RectangleToScreen(this.button1.ClientRectangle);
if (rc.Contains(point)) MessageBox.Show("button1 被经过了");
}
------解决方案--------------------
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
this.textBox1.Text = e.X.ToString() + ":" + e.Y.ToString();
}
private void panel4_MouseEnter(object sender, EventArgs e)
{
this.Capture = true;
Panel p = sender as Panel;
this.textBox1.Text = this.textBox1.Text + ":" + p.Name;
}
private void Form1_MouseLeave(object sender, EventArgs e)
{
this.Capture = false;
}
我测试下,没有问题。我用4个panel平分了窗体。
------解决方案--------------------
------解决方案--------------------
学到不少,没白逛
------解决方案--------------------
每天回帖即可获得10分可用分
------解决方案--------------------
鼠标移动的事件属于某个控件, 你写的代码也跟那个控件有关
如果鼠标移出那个控件怎么办, 需要 grab 住鼠标, 使得鼠标移动到外面, 控件仍旧能接收到鼠标消息
随后你就跟踪鼠标移动事件,
在移动中:
// 得到窗口句柄
POINT windowPoint = POINT.FromPoint(this.PointToScreen(new Point(e.X, e.Y)));
IntPtr hwnd = NativeUtils.WindowFromPoint(windowPoint);
if (hwnd != IntPtr.Zero) {
// 如果是托管的, 就能得到对应的 control 类对象
// 不是所有 hwnd 都是托管的哦
Control c = Control.FromHandle(hwnd);
}
[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(POINT Point);
------解决方案--------------------
鼠标移动的事件属于某个控件, 你写的代码也跟那个控件有关
如果鼠标移出那个控件怎么办, 需要 grab 住鼠标, 使得鼠标移动到外面, 控件仍旧能接收到鼠标消息
随后你就跟踪鼠标移动事件,
在移动中:
// 得到窗口句柄
POINT windowPoint = POINT.FromPoint(this.PointToScreen(new Point(e.X, e.Y)));
IntPtr hwnd = NativeUtils.WindowFromPoint(windowPoint);
if (hwnd != IntPtr.Zero) {
// 如果是托管的, 就能得到对应的 control 类对象
// 不是所有 hwnd 都是托管的哦
Control c = Control.FromHandle(hwnd);
}
[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(POINT Point);
------解决方案--------------------
给你一个完整的示例:
/**********************
* 课题:将窗体中鼠标所在控件名显示在窗体标题上
* 作者:ZAXX
* QQ : 94027486
* 本课题可简单扩展:获取屏幕上鼠标所在位置的窗口句柄与类名
**********************/