如何在C#中得到消息发送目标控件的ID

zyug 2012-04-18 05:00:14
很简单的一个问题
比如有个button, ID为Button1,点击了这它
按理来说应该由button1_click事件就触发了

现在呢,我用这样的方式
使用了wndproc进行重写

WndProc(ref Message m)
protected override void WndProc(ref Message m)
{

base.WndProc(ref m);
}


这里面我怎么样得到控件ID,我如何知道这个消息m 是发送给Button1的呢?
...全文
326 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
df978 2012-09-16
  • 打赏
  • 举报
回复
我怎么试不成功的呢
zyug 2012-04-18
  • 打赏
  • 举报
回复

protected override void WndProc(ref Message m)
{

if (m.HWnd == this.Handle && m.WParam == this.button1.Handle )
{
// MessageBox.Show("找到了控件");
}
base.WndProc(ref m);
}


it's WParam
蔡袅 2012-04-18
  • 打赏
  • 举报
回复
消息循环嘛,你看看这个消息的类型
这个类型有个枚举值,既然是Button自然有它感兴趣的按键消息
蔡袅 2012-04-18
  • 打赏
  • 举报
回复
hWnd 是个句柄,估计要使用Pinvoke方式
根据句柄得到控件,
GetClassName
或者查下这个函数
GetWindowText
zyug 2012-04-18
  • 打赏
  • 举报
回复


class WinAPI
{
  [DllImport("coredll.dll")]
  private static extern IntPtr SetCapture(IntPtr hWnd);

  [DllImport("coredll.dll")]
  private static extern IntPtr GetCapture();



  public static IntPtr GetHWnd(Control ctrl)
  {
    IntPtr hOldWnd = GetCapture();

    ctrl.Capture = true;

    IntPtr hWnd = GetCapture();

    ctrl.Capture = false;

    SetCapture(hOldWnd);

    return hWnd;
  }

}

m.HWnd = WinAPI.GetHWnd(Button1);


确定如上?
zyug 2012-04-18
  • 打赏
  • 举报
回复
m.hWnd = Button1.????
bdmh 2012-04-18
  • 打赏
  • 举报
回复
m.HWnd

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧