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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top