2009-07-27 14 views
6

İlk kapatma, mousewheel olayı çok rahatsız edici olan Visual Studio 2008 olayları bölmesinde listelenmiyor. C# Windows Forms'ta MouseWheel olayı tetiklenemiyor

çevrimiçi doğru biçimde olsa bulundu ve benim koduna bu yazmış:

private void Form1_MouseWheel(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

... Fare tekerleğinin döndürüldüğünde hangi ben hiçbir yanıt alıyorum.

Kodumun ana sınıf alanında bunu yapıyorum ve tasarımcı, yalnızca bir form/pencere/her ne olursa olsun, fare, odağı kaybetmemekte.

namespace BlahBlah 
{ 
    public partial class Form1 : Form 
    { 

Ve bunun aksine

, hemen mousewheel biri yukarıda bu yöntemi var ve iyi çalışıyor:

private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

sanırım olsaydı, ben doğru kod bağlama değilim düşünüyorum forma (aka: bu olayı tasarımcının etkinlik paneline eklediysem görsel stüdyonun benim için yapacağı tüm şeyler). Ama yanılıyor olabilirim ya da sadece aptalca bir hata yapıyordum.

Fare tekerleği döndürüldüğünde HERHANGİ bir yanıt almama yardım edebilir misiniz? Teşekkürler!

cevap

11

Fare tekerleği olayının ayarlanması gerekir. Bir yorum ile cevap verebilecek kadar üne yok

this.MouseWheel+= new MouseEventHandler(Form1_MouseWheel); 
+0

Bu kadar, çok teşekkürler! Sidequestion: MouseMove yöntemim için de bir tane var (this.MouseMove + = Form1_MouseMove;), ancak MouseClick için değil. Neden bir tane gerekmiyor? – cksubs

+1

Şey ... bir fare tıklaması yanıt veriyor mu? Fare tıklamalarına tepki vermesi gerekmiyorsa, buna ihtiyaç duyulmaz. Bazı kontroller otomatik olarak fare tıklaması olaylarını bağlar (Kaydırmak ve neyi yapmak için). Neyi başarmaya çalıştığınıza bağlıdır. – Kurisu

+0

Sadece MouseClick yöntemimin (fare tıklatmayla tetiklenen) yapıcıda ".... + = ...." öğelerine gerek kalmadan çalıştığı anlamına gelir. Bu yüzden MouseWheel için böyle bir şey eklemeyi unutmuşum, MouseClick iyi çalıştı. – cksubs

1

Bu olaya nasıl abone olacağımı bilmiyorum, ancak bunun yerine formdaki uygun yöntemi geçersiz kılabilirsiniz.

6

ancak yan sorusunun cevabı delegeler gerekiyor olmasıdır; (InitalizeComponents() sonra)

Form1'ın kurucusuna bu ekle kurulmak. Ancak, özellikler bölmesinde çift tıklatarak oluşturduğunuzda, kod otomatik olarak oluşturulur ve InitializeComponent yönteminde * .designer.cs dosyasına yerleştirilir.

+1

Yep, designer.cs dosyasına bir göz atın ve bölgelere bakın, kodun gen'in bu etkinlikleri sizin için nasıl kablolandığını göreceksiniz. –

1

Bu durumda, etkinliğe kaydolmak yerine OnMouseWheel üye işlevini geçersiz kılmak en iyisidir. Örneğin,

+0

Bu neden daha iyi? –

+1

@JonofAllTrades Daha iyi performansa ve daha fazla esnekliğe sahiptir (çalışmanızı, etkinliğe abone olan delege katılımcılarından önce yapabilirsiniz). http://stackoverflow.com/questions/159317/when-should-you-override-onevent-as-opposed-to-subscribing-to-the-event-when-inh –