如何为一个控件(即组合框)禁用鼠标滚轮?

时间:2014-05-14 13:10:17

标签: c# winforms datagridview combobox mouseevent

我创建了一个应用程序,它使用组合框选择用户,然后为该用户显示数据库。但是,当您首次单击面板或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计算机你如何只禁用一个控件的鼠标滚轮

3 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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