2011-12-23 11 views
6

Bir açılan kutuya benzer bir işlevle bir .net form denetimi uygulamak çalışıyorum, ancak öğelerin listesini genişletmek için form üzerinde herhangi bir yere fare olayları engellemek için uygun yöntemi bilmiyorum.Liste öğelerini görüntülerken açılan kutular, listeyi gizlemek için formdaki herhangi bir yere fare olaylarını nasıl kesiyor?

Liste görüntülenirken diğer denetimlerin fare olaylarına yanıt vermesini nasıl önleyebilirim?

Genişletilen listeyi gizlemek için formda herhangi bir yere fare tıklatma olayını verimli ve güvenli bir şekilde nasıl yakalarım?

+0

Burada başka bir çözüm bulabilirsiniz: http://stackoverflow.com/a/15305176/1522062 –

cevap

6

ToolStripDropDown ile birlikte bir ToolStripControlHost kullanın ve ComboBox açılır gibi çalışacaktır. Fare olaylarını ele alma konusunda endişelenmenize gerek kalmayacak.

Bunu daha önce kullandım: bir form üzerinde bir düğme kontrolü ile

Private Sub ShowControl(ByVal fromControl As Control, ByVal whichControl As Control) 
    '\\ whichControl needs MinimumSize set:' 
    whichControl.MinimumSize = whichControl.Size 

    Dim toolDrop As New ToolStripDropDown() 
    Dim toolHost As New ToolStripControlHost(whichControl) 
    toolHost.Margin = New Padding(0) 
    toolDrop.Padding = New Padding(0) 
    toolDrop.Items.Add(toolHost) 
    toolDrop.Show(Me, New Point(fromControl.Left, fromControl.Bottom)) 
End Sub 

Hızlı Demo:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    ShowControl(Button1, New MonthCalendar) 
End Sub 

başlığınızdaki soruya cevap vermek için ben pinvoke çağrıları düşünüyorum SetCapture ve Release Capture, bu tür işlevselliklerin üstesinden gelmek için kullanılır.

1

Control.Capture

olarak belgelerinde açıklandığı, şimdi "Kendi" fare (başkası yakalar kadar - bu kötü formudur rağmen). Tüm fare mesajlarını alırsınız ve işten atmak için kontrolünüzde olmayan bir "Aşağı" işlem yapabilirsiniz.

+0

Bu sadece yarım çalışma gibi görünüyor. Fare yakalama ile kontrol içindeki tüm kontroller çalışmayı durdurur. Örneğin, fare yakalama özelliğine sahip liste kutusundaki kaydırma çubuğu, yakalama serbest bırakılıncaya kadar çalışmaz. –

İlgili konular