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