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

C# 如何为一个控件(即组合框)禁用鼠标滚轮?,c#,winforms,datagridview,combobox,mouseevent,C#,Winforms,Datagridview,Combobox,Mouseevent,我创建了一个应用程序,它使用组合框选择一个用户,然后为该用户显示一个数据库。但是,当您在没有首先单击面板或datagridview的情况下滚动时,它会通过选择不同的用户数据库信息在组合框上滚动 this.cmbNetworkComputers.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.cmbNetworkComputers_MouseWheel); 与 但是,这些选项仅对我的整个winform而不是网络计算机的组

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

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


但是,这些选项仅对我的整个winform而不是网络计算机的组合框禁用。如何仅对一个控件禁用鼠标滚轮向代码中添加事件处理程序

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;
}
private void strSearchBox_MouseWheel(object sender, MouseEventArgs e) {
  logList.TopIndex -= e.Delta;
  ((HandledMouseEventArgs)e).Handled = true;
}

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

我遇到了与您相同的问题,但我通过以下方式解决了它:

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;
}
private void strSearchBox_MouseWheel(object sender, MouseEventArgs e) {
  logList.TopIndex -= e.Delta;
  ((HandledMouseEventArgs)e).Handled = true;
}

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

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

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

是否确实要禁用鼠标滚动,或者只将焦点设置为窗体?使用
OnMouseEnter
事件,并将焦点放在发送控件上。我只希望组合框中的鼠标滚动处于非活动状态代码有效。但是,在鼠标滚轮可用之前,我必须单击不同的控件或对象。除了鼠标离开或焦点丢失,我是否使用相同的代码,并使senderControl=true?