【问题标题】:How to disable mousewheel for one control i.e. Combo Box?如何禁用一个控件的鼠标滚轮,即组合框?
【发布时间】:2014-07-02 13:43:30
【问题描述】:

我创建了一个应用程序,它使用组合框选择用户,然后为该用户显示一个数据库。但是,当您在不先单击面板或 datagridview 的情况下滚动时,它会通过选择不同的用户数据库信息来滚动组合框,我继续

this.cmbNetworkComputers.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.cmbNetworkComputers_MouseWheel);

void cmbNetworkComputers_MouseWheel(object sender, MouseEventArgs e)
{
    ((HandledMouseEventArgs)e).Handled = true;
}

但是这些禁用了我的整个 winform 而不仅仅是组合框 cmbNetwork 计算机你如何只禁用一个控件的鼠标滚轮

【问题讨论】:

  • 您真的要禁用鼠标滚动还是只是将焦点设置在表单上?
  • 使用OnMouseEnter事件,关注发送控制。
  • 我希望鼠标滚动只对组合框无效

标签: c# winforms datagridview combobox mouseevent


【解决方案1】:

MouseWheel 事件处理程序并非特定于特定控件,而是适用于整个表单。这可能是它不显示单个控件的属性网格的原因。您可以通过检查特定控件的发送者值来选择退出任何不应处理鼠标滚轮消息的控件。这允许其他控件使用鼠标滚轮。

private void cboProfile_MouseWheel(object sender, MouseEventArgs e)
{
    if (sender == cboProfile)
    {
        ((HandledMouseEventArgs)e).Handled = true;
    }
}

【讨论】:

    【解决方案2】:

    我和你有同样的问题,但我是这样解决的:

    private void strSearchBox_MouseWheel(object sender, MouseEventArgs e) {
      logList.TopIndex -= e.Delta;
      ((HandledMouseEventArgs)e).Handled = true;
    }
    

    现在,当组合框处于活动状态时,组合框会滚动显示列表。我想这就是你想要的,不是吗?

    【讨论】:

      【解决方案3】:

      向您的代码添加事件处理程序

      private void anycontrol_MouseEnter(object sender, System.EventArgs e) 
      {
          var senderControl = sender as System.Windows.Forms.Control;
          if(senderControl==null)
              return;
          senderControl.Focus();
      }
      

      并将其分配给您希望自动应用焦点的任何控件。

      somePanel.MouseEnter += new System.EventHandler(anycontrol_MouseEnter);
      //or this way
      somePanel.MouseEnter += anycontrol_MouseEnter;
      someComboBox.MouseEnter += anycontrol_MouseEnter;
      

      编辑

      包括您提供的详细信息,我会这样做:

      bool AllowUsersScrolling;
      private void usersCombobox_MouseLeave(object sender, System.EventArgs e) 
      {
          AllowUsersScrolling = false;
      }
      private void usersCombobox_MouseEnter(object sender, System.EventArgs e) 
      {
          AllowUsersScrolling = true;
      }
      private void usersCombobox_MouseWheel(object sender, MouseEventArgs e)
      {
          if(!AllowUsersScrolling)
              ((HandledMouseEventArgs)e).Handled = true;
      }
      

      并将这些处理程序分别附加到您的控件的事件。

      【讨论】:

      • 代码确实有效。但是我必须在鼠标滚轮可用之前单击不同的控件或对象我是否使用相同的代码但鼠标离开或焦点丢失并使 senderControl = true?
      猜你喜欢
      • 2011-02-27
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2013-04-06
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多