2010-01-19 16 views
13

El evento MouseWheel no se activa cuando estoy usando cualquier control (ListBox, Panel, TextBox) con barras de desplazamiento.El evento MouseWheel no se dispara cuando se usa cualquier control con barras de desplazamiento (en C# Windows Forms)

para reproducir el problema:

public class Form1 : Form 
{ 
    private readonly Button button1; 
    private readonly TextBox textBox1; 

    private void button1_MouseWheel(object sender, MouseEventArgs e) 
    { 
    ToString(); // doesn't fire when uncomment lines below 
    } 

    public Form1() 
    { 
    button1 = new Button(); 
    textBox1 = new TextBox(); 
    SuspendLayout(); 

    button1.Location = new System.Drawing.Point(80, 105); 
    button1.Size = new System.Drawing.Size(75, 23); 
    button1.MouseWheel += button1_MouseWheel; 
    button1.Click += button1_Click; 

    textBox1.Location = new System.Drawing.Point(338, 105); 
    //textBox1.Multiline = true; // uncomment this 
    //textBox1.ScrollBars = ScrollBars.Vertical; // uncomment this 
    textBox1.Size = new System.Drawing.Size(100, 92); 

    ClientSize = new System.Drawing.Size(604, 257); 
    Controls.Add(textBox1); 
    Controls.Add(button1); 
    ResumeLayout(false); 
    PerformLayout(); 
    } 

    // Clicking the button sets Focus, but even I do it explicit Focus() or Select() 
    // still doesn't work 
    private void button1_Click(object sender, System.EventArgs e) 
    { 
    button1.Focus(); 
    button1.Select(); 
    } 
} 
+0

Tal vez el problema es en el ratón, utilizo "Lenovo USB óptico con rueda del ratón" (configuración por defecto "Whell botón" función "Quick/desplazamiento automático") – halorty

+0

que utilizo: Windows Vista Buisness, .Net Framework 3.5 SP1 , Visual Studio 2008 Standard Edition (todas las revisiones oficiales). Build Debug: Target Framework = .Net Framework 3.5, Tipo de salida = Aplicación de Windows – halorty

+0

Configuración del mouse: Panel de control/Mouse/Rueda/Whell-> Activar desplazamiento universal; Panel de control/Mouse/Rueda/Botón Whell-> Quick/AutoScrol; Panel de control/Mouse/Rueda/Velocidad de desplazamiento-> Desplazamiento = 10 línea (s) por cada; – halorty

Respuesta

2

encontré solución, gility es "Configuración del ratón" por defecto. Rueda Ratón óptico de configuración por defectoLenovo USB es:

Panel de control/ratón/Rueda/Whell->Habilitar desplazamiento universal;

me cambió a:

Panel de control/ratón/Rueda/Whell->uso de Microsoft Office 97 Desplazamiento de emulación Sólo

Ahora en código .NET MouseWheel trabajar con Centrado control.


Pero las preguntas son:

  • cómo puedo solucionarlo en el código .NET?
  • ¿cómo puedo detectar esta situación en el código .net?

¿Alguna idea?

+0

Uso Spy ++ y comprobar los mensajes que se envían a los controles. – SLaks

2

Normalmente se necesita para asegurarse de que el control que desea controlar el evento MouseWheel está activo.

Por ejemplo, intente llamar al button1.Select() en el evento Carga de formulario (o se muestra) y luego usando la rueda de desplazamiento.

por ejemplo:

private void Form1_Load(object sender, EventArgs e) 
{ 
    button1.MouseWheel += new MouseEventHandler(button1_MouseWheel); 

    button1.Select(); 
} 
+0

Todavía nada, el mismo problema, es muy extraño, pero en mi caso no funciona. Incluso configuro Focus o Select, y Cursor está sobre el buton1, cuando uso la rueda del mouse, se desplaza textbox1 (sic!) – halorty

0

me trataron su ejemplo, y, si se comentaron las líneas o no, el evento MouseWheel sólo se activa si el botón está enfocado. Este comportamiento es por diseño. (El evento MouseWheel, al igual que los eventos de teclado, va al control de foco)

+0

Leo sobre la documentación pero, es muy extraño, pero en mi caso no funciona : Agregué al código: public Form1() { (...) button1.Haga clic en + = button1_Click; (...) } private void button1_Click (object sender, System.EventArgs e) { button1.Focus(); } No trabajo, incluso ajustar el enfoque, y el cursor se encuentra sobre el buton1, cuando se utiliza la rueda del ratón, se desplaza a TextBox1 (sic!) – halorty

12

Estaba teniendo el mismo problema, y ​​lo que funcionó para mí fue agregar un controlador para el evento MouseEnter en el control, que se desencadena con o sin foco.

private void chart1_MouseEnter(object sender, EventArgs e) 
{ 
    chart1.Focus(); 
} 

Después de eso pude obtener los eventos de la rueda del mouse sin problemas.

Cuestiones relacionadas