2010-03-26 25 views
6

, ben OpenFileDialog ve SaveFileDialog kontrollerde bir hata olduğunu inandığımız geldi. Bir Google araması, aynı sorunu fark eden başka bir kişiyi buldu, ancak ne bir çözüm, ne de bir çözüm sağlandı. Bu konuya şu adresten bakabilirsiniz: http://bytes.com/topic/visual-basic-net/answers/389470-open-file-dialog-picturebox-click-event.FileDialog DoubleClick Davranış

Formumda, MouseDown olayını işleyen özel bir denetim var. Fareyi bu denetimin üzerine getirirken (açık bir şekilde aralarındaki iletişim kutusuyla) FileDialog denetimindeki bir dosyayı çift tıklatırsam, MouseDown olayı tetiklenir. Bunun benim kontrolümle ilgili bir sorun olduğunu düşünmüyorum, çünkü daha önce bahsettiğim kişi bunun bir PictureBox kontrolü ile gerçekleştiğini fark etti. Diyalog kutusunda fare tuşu basılı tutulduğu halde (dosyayı açmak için ikinci tıklama için), iletişim formu kapandığında, kontrol formuna ve kontrolüme geçmiştir.

Ben iletişim kutusu etkinken benim kontrolünü devre dışı denedi, ama bu olayı yakalamasını durmadı. Bunun, iletişim kutusunun kapatılmasından sonra olayın aktarılmasından kaynaklandığından, kontrolümün yeniden etkinleştirileceğini düşünüyorum. Bu tıklamanın forma ulaşmasını engellemenin bir yolunu biliyor mu ve kontrolüm mü? Ayrıca, bu gerçekten FileDialog denetimlerinde bir hata olup olmadığını veya yalnızca bazı ayarların yanlış yapılandırılmış olup olmadığını doğrulayabilir mi?

cevap

1

Sorunumun neden oluştuğunu anladığımda MouseDown ve MouseMove olaylarını denedim. FileDialog kutusu kaybolduğunda, MouseMove olayı tetiklendi. Aynı kod bloğunu iki kez yazmaktan kaçınmak için bir girişimde (Mouse), MouseHow işleyicisinden MouseMove işleyicisinden çağrı yaparak bazı koşulların (yani fare düğmesinin tutulduğu) MouseDown işleyicisinin etkin bir şekilde çalışmasına neden olacağını düşünüyordum. hiçbir şey değil. Sorun, fare düğmesinin basılı tutulmasıydı, çünkü FileDialog kutusu MouseDown'da (MouseClick değil) kayboluyordu. Bu, MouseDown işleyicisinin beklemediğim zaman koşul kodunu yürütmesine neden oldu.

Bundan bir şeyler öğrenmek için: olay işleyicileri zincirlenirken dikkatli olun. Veya daha iyisi, ortak işlevselliği bir yönteme ve ASLA zincir olay işleyicilerine çekin. daha yakından gerçek olaylar bakmak için bana fikir verdiği için Jelly Amma :-)

teşekkürler.

3

Bu sorunu daha önce duymuştum ve bildiğim kadarıyla olay sırasını düzgün bir şekilde kullandığınızdan emin olmanızın bir sorun olduğunu biliyorum. Kodunuzu görmeden, kullanıcı kontrolü uygulamasının doğru olup olmadığını kontrol etmek çok zordur, ancak sık sık, temel olayların gerçekleşmesine izin vermeden fare olaylarını geçersiz kılmak, bu tür davranışlara yol açabilir.

+0

Onaltılmış OnMouseDown (MouseEventArgs e) işleyicimden base.OnMouseDown (e) aramasını arıyorum. Her ikisinden de önce (üstte) ve sonra (alt kısmında) denemeyi denedim, ama her iki pozisyonda da sorun üzerinde herhangi bir etkisi yok gibi görünüyor. Etkinlik sırasına daha yakından bakmalı ve orada bir şey bulup bulmayacağımı görmeliyim. –