【问题标题】:C# WF prevent trackbar from getting mouse wheel eventC# WF 防止 trackbar 获取鼠标滚轮事件
【发布时间】:2017-10-20 09:02:41
【问题描述】:

我有一个 C# 中的 WindowsForms UI。我有一个面板和一个图片框。 我只是通过表单获取鼠标滚轮事件,然后在面板中缩放 PictureBox

    public MainWindow()
    {
        InitializeComponent();
        this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.zoom_handler);// Capture Mouse wheel event
    }

问题是当我使用 Trackbar 时,Trackbar 会收到 mouseWheel 事件,我无法再缩放图像。我无法通过单击 PictureBox 或 Panel 来释放它。现在我必须做什么?

【问题讨论】:

    标签: c# windows-forms-designer mousewheel


    【解决方案1】:

    尝试用这种方式禁用trackbar的mouseWheel:

    trackBar1.MouseWheel += new MouseEventHandler(Disable_MouseWheel);
    
    
    
    private void Disable_MouseWheel(object sender, EventArgs e)
    {
        HandledMouseEventArgs ee = (HandledMouseEventArgs)e;
        ee.Handled = true;
    }
    

    【讨论】:

    • 感谢您的回答,但不幸的是它不起作用。还有其他方法可以禁用它,例如This,但它会禁用鼠标滚轮事件而不是让它形成。
    • ee.Handled 应该是真还是假?
    • @Snympi true,如果它是 false,默认 MouseWheel 处理程序将起作用
    • 同意,必须检查 MSDN 文档以确保。命名有点反直觉。
    • @Snympi,这与直觉并不矛盾,如果为真,则表示该事件已经被处理,无需使用默认处理程序进行处理。
    【解决方案2】:

    我终于找到了答案。

        public MainWindow()
        {
            InitializeComponent();
    
            this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.zoom_handler);// Capture Mouse wheel event
            mytrackbar.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.zoom_handler);// Capture Mouse wheel event
            mytrackbar.MouseWheel += (sender, e) => ((HandledMouseEventArgs)e).Handled = true;
        }
    

    如果你想用鼠标滚轮禁用轨迹栏滚动,最后一行就足够了。但是使用该行,您将禁用鼠标滚轮事件,直到您专注于具有鼠标滚轮事件的其他控件。如果您在某些不能简单地获得焦点的控件(或可能是窗体)上使用鼠标滚轮事件,则必须在轨迹栏鼠标滚轮事件上调用您的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2013-11-30
      • 2014-02-11
      • 2022-11-12
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多