为什么我的鼠标事件没有被触发?

时间:2016-05-26 15:40:13

标签: c# winforms

以下是我的一个表单鼠标事件处理程序的示例:

private void GENIO_Viewer_Form_MouseDown(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Left)
    {
        m_bLeftButton = true;
        m_MousePosition = e.Location;
        m_MouseClick = e.Location;

        if(m_bZoomWindow)
        {
            m_Points.Clear();
            m_Points.Add(GetWorldCoordinates(e.Location));
        }
    }

    base.OnMouseDown(e);
}

我在其中放置了一个断点,它永远不会被触发。我在表单定义中遗漏了什么吗?

更新

表单有一个放大的 TableLayerPanel ,所以我添加了一个额外的事件处理程序:

private void tableLayoutPanel_MouseDown(object sender, MouseEventArgs e)
{
    MessageBox.Show("Yes");
}

但即使这样也不会被截获。 tableLayoutPanel反过来显示一个UserControl1对象(派生自UserControl)。

问题是,即使我添加了正确的处理程序(对于UserControl),我仍然必须将其反馈给表单本身,因为这是我需要处理的地方。

更新:这是我的表单的事件处理程序的部分列表:

enter image description here

1 个答案:

答案 0 :(得分:1)

我似乎无法使PreviewMouseDown事件起作用。我尝试手动编辑代码,但不会编译。

基于某人的评论,我确定了我必须使用正确的控制来截取消息,即具有焦点的控件。这是一个派生自 UserControl 的对象。

所以我必须将我的事件处理程序添加到那个类。例如:

protected override void OnMouseDown(MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        m_bLeftButton = true;
        m_MousePosition = e.Location;
        m_MouseClick = e.Location;

        if (m_bZoomWindow)
        {
            m_Points.Clear();
            m_Points.Add(GetWorldCoordinates(e.Location));
        }
    }

    base.OnMouseDown(e);
}