【问题标题】:c# Mouse events through child controlc# 通过子控件的鼠标事件
【发布时间】:2016-06-10 10:11:31
【问题描述】:

我有一个自定义用户控件,其中包含一个占据 80% 空间的图表元素。

当它被放置在表单中时,我可以单击图表未占用的区域,并且单击/mousedown/mouseup 事件起作用。但是,当我单击图表区域时,鼠标事件并未通过,因此未触发。

是否有一种全局方法可以在不为表单上的每个控件添加事件函数的情况下执行此操作?

    void Drag_MouseDown(object sender, MouseEventArgs e)
    {
        activeControl = sender as UserControl;
        previousLocation = e.Location;
        Cursor = Cursors.SizeAll;
    }

    void Drag_MouseMove(object sender, MouseEventArgs e)
    {
        if (activeControl == null || activeControl != sender)
            return;

        var location = activeControl.Location;
        location.Offset(e.Location.X - previousLocation.X, e.Location.Y - previousLocation.Y);
        activeControl.Location = location;
    }

    void Drag_MouseUp(object sender, MouseEventArgs e)
    {
        activeControl = null;
        Cursor = Cursors.Default;
    }

这些目前必须手动设置为自定义用户控件和图表

【问题讨论】:

  • 你能在这里分享代码吗?
  • 我已经添加了上面的代码。我想知道是否在用户控件上的任何子控件上触发这些鼠标事件之一时调用这些函数,而不必手动设置它们。
  • 你在哪里分配了这个事件?
  • 我已将它们添加到设计管理器属性部分。我在 overides 上找到了一些项目,但似乎无法正常工作
  • 我也尝试过使用受保护的覆盖 void OnClick(EventArgs e) { MessageBox.Show("Test");但同样,这只适用于图表之外

标签: c# visual-studio


【解决方案1】:

图表似乎覆盖了您的鼠标事件。因此,您也可以尝试将事件侦听器添加到图表中。

PS:我们可以将相同的方法分配给不同的监听器。

【讨论】:

  • 是否有一个全局函数可以做到这一点而不必为每个控件添加监听器?
  • 它通常恰好是听,但在这种情况下,图表似乎在这些事件上做了一些它自己的事情。所以,我们最好覆盖并执行我们的代码。
  • @AshleyCusack 也参考这个stackoverflow.com/questions/1719636/…
猜你喜欢
  • 2021-09-14
  • 2011-08-05
  • 2011-09-29
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
相关资源
最近更新 更多