2009-12-10 11 views

risposta

85

utilizzare l'evento MouseWheel per il ComboBox:

void comboBox1_MouseWheel(object sender, MouseEventArgs e) { 
    ((HandledMouseEventArgs)e).Handled = true; 
} 

Nota: dovrete creare eventi in codice:

comboBox1.MouseWheel += new MouseEventHandler(comboBox1_MouseWheel); 
+14

Funziona perfettamente, grazie! Sidenote: se vuoi che lo scorrimento continui a essere applicato quando il ComboBox viene rilasciato, aggiungi le linee: "ComboBox control = (ComboBox) mittente;" e "if (! control.DroppedDown)" prima della riga "((HandledMouseEventArgs) e) .Handled = true". – Heliac

+3

Attualmente non funziona con Mono. https://bugzilla.xamarin.com/show_bug.cgi?id=25201 – chrish

+3

So che questo è vecchio, ma mi piace questa versione subito dopo 'InitializeComponent();' nel costruttore di moduli: 'comboBox1.MouseWheel + = (o, e) => ((HandledMouseEventArgs) e) .Handled = true; ' –

0

io uso un altro soluzione che funziona anche su Mono.

L'obiettivo è impedire lo scorrimento accidentale (ovvero quando l'utente non sta guardando il comboBox quando si utilizza la rotellina del mouse). Se scorre all'esterno della parte visibile di comboBox, la casella combinata non dovrebbe scorrere, altrimenti dovrebbe.

La mia soluzione:

  • Inserire una sola lettura casella di testo al di fuori della parte visibile dello schermo. In form_load ho posizionato la riga: hiddenTextbox.left = -100;

  • Impostare lo stato attivo su questa casella di testo quando il mouse lascia la casella combinata utilizzando l'evento di allontanamento del mouse. In comboBox1_MouseLeave ho posizionato la riga: hiddenTextbox.focus();

  • Manipolazione del mouse Evento di ruota: From1.MouseWheel + = Form1_MouseWheel; textBoxHidden.MouseWheel + = Form1_MouseWheel;

Problemi correlati