以下是我的一个表单鼠标事件处理程序的示例:
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),我仍然必须将其反馈给表单本身,因为这是我需要处理的地方。
更新:这是我的表单的事件处理程序的部分列表:
答案 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);
}