2009-12-10 19 views

Odpowiedz

85

użyć zdarzenia MouseWheel dla ComboBox:

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

Uwaga: musisz utworzyć zdarzenie w postaci kodu:

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

Działa idealnie, dzięki! Sidenote: jeśli chcesz, aby przewijanie wciąż obowiązywało po opuszczeniu ComboBox, po prostu dodaj linie: "ComboBox control = (ComboBox) sender;" i "if (! control.DroppedDown)" przed linią "((HandledMouseEventArgs) e) .Handled = true". – Heliac

+3

To obecnie nie działa z Mono. https://bugzilla.xamarin.com/show_bug.cgi?id=25201 – chrish

+3

Wiem, że jest stary, ale podoba mi się ta wersja zaraz po 'InitializeComponent();' w konstruktorze formularza: 'comboBox1.MouseWheel + = (o, e) => ((HandledMouseEventArgs) e) .Handled = true; ' –

0

używam innego rozwiązanie, które działa również na Mono.

Celem jest zapobieganie przypadkowemu przewijaniu (wtedy użytkownik nie patrzy na comboBox przy użyciu kółka myszy). Jeśli przewinie poza widoczną częścią comboBox, pole kombi nie powinno się przewijać, w przeciwnym razie powinno.

Moje rozwiązanie:

  • Umieść pole tekstowe tylko czytać poza widocznej części ekranu. W formula_load umieściłem linię: hiddenTextbox.left = -100;

  • Ustaw fokus na to pole tekstowe, gdy mysz opuszcza pole kombi za pomocą zdarzenia opuszczania myszy. W comboBox1_MouseLeave umieściłem linię: hiddenTextbox.focus();

  • Uchwyt zdarzenia mouseWheel: From1.MouseWheel + = Form1_MouseWheel; textBoxHidden.MouseWheel + = Form1_MouseWheel;

Powiązane problemy