Como impedir a rolagem do mouse no ToolstripCombobox?
-
27-09-2019 - |
Pergunta
Estou tentando desativar a rolagem do mouse no meu stripcomboBox, pensei em poder pegar o evento da roda do mouse, mas embora o evento esteja disponível para o ComboBox, ele não está disponível para o ToolstripComboBox. Alguma ideia?
Solução
o ToolStripComboBox
expõe útil seu subjacente ComboBox
controle em seu nome apropriadamente ComboBox
propriedade. Isso nos permite acessar suas propriedades, métodos e eventos que não foram envolvidos no ToolStripComboBox
.
E, como você provavelmente sabe, o padrão ComboBox
O controle expõe um MouseWheel
evento Isso dispara cada vez que a roda do mouse é rolada enquanto a caixa de combinação tem foco.
Juntando essas duas coisas, podemos adicionar um manipulador para o ToolStripComboBox
O controle está subjacente ComboBox
Control's MouseWheel
evento e substituir seu comportamento padrão.
Então, supondo que você tenha um formulário que contenha um ToolStrip
e a ToolStripComboBox
, você pode usar algo como o seguinte código:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Attach a handler for the MouseWheel event
ToolStripComboBox1.ComboBox.MouseWheel += new MouseEventHandler(ToolStripComboBox_MouseWheel);
}
private void ToolStripComboBox_MouseWheel(object sender, MouseEventArgs e)
{
//Cast the MouseEventArgs to HandledMouseEventArgs
HandledMouseEventArgs mwe = (HandledMouseEventArgs)e;
//Indicate that this event was handled
//(prevents the event from being sent to its parent control)
mwe.Handled = true;
}
}
Como alternativa, é claro, você sempre pode subclasse o existente ToolStripComboBox
Controle e substitua seu comportamento lá da mesma maneira mostrada acima.
Outras dicas
Além do que Cody Gray sugeriu que você pudesse querer que o Wheel Scolling funcione quando o ComboBox for descartado. Apenas chech o estado desistido na alça da roda de mouse:
public class MyToolStripComboBox : ToolStripComboBox
{
public MyToolStripComboBox()
{
this.ComboBox.MouseWheel += new MouseEventHandler(ComboBox_MouseWheel);
}
void ComboBox_MouseWheel(object sender, MouseEventArgs e)
{
if (!this.ComboBox.DroppedDown)
((HandledMouseEventArgs)e).Handled = true;
}
}
A rolagem caiu combinação com roda não muda a seleção, então funciona como esperado