2008-10-20 16 views
8

OnMouseClick ve OnMouseDoubleClick'i geçersiz kılmak ve hangi tıklama stiline bağlı olarak farklı eylemler gerçekleştirmek istiyorum..Net'deki tek ve çift tıklamaları nasıl ayırt edebilirim?

Sorun, OnMouseClick'in hem tek hem de çift tıklamalar için gerçekleşmesi ve OnMouseDoubleClick'ten önce çağrılmasıdır.

Bunun bir ortak gereksinim olması gerektiğinden eminim, bu yüzden oldukça açık bir şey eksik olduğumu düşünüyorum. Biri beni bilgilendirebilir mi?

Eklemek için şunları yapın: MouseEventArgs.Clicks sayısı yardımcı olmaz. Çift tıklama durumunda, ilk tıklama tek bir tıklamayla ele alınır. OnMouseClick with MouseEventArgs.Clicks == 1.

Eklemek için düzenleyin: nesneler küçük resimlerdir. Tek tıklatma, dışa aktarma için seçimi açıp kapatmalıdır. Küçük resmi tam ekran yapmalıdır. Seçim ve "aktivasyon" eylemleri ortogonaldir. Bu ... iki eylemlerle

Cheers, Windows'un içinde müminin Rob

+0

Ne davranış tek ve çift tıklama arasındaki uyguladıklarını? Windows standardı tek tıklat = seç, çift tıklama = açık, tek tıklatmanın açılmadan önce "güvenli" yi seçmesini sağla ... –

+0

Tek tıklamayla seçimi açıp kapatır (dışa aktarma için bir küçük resim seçin). Çift tıklama etkinleştirir (küçük resim tam ekran yapar). Böylece seçim ve aktivasyon iki ayrı işlemdir. – Rob

+0

Ancak, etkinleştirmeden önce seçmek isteyeceksiniz, böylece bunları bağımsız olarak ele geçirme geçersiz olacaktır. Ayrıca, genel kullanımda unselect, başka bir yere tıklanır, ikinci bir tıklama değildir. –

cevap

12

altta yatan sorun olduğunu gösterebilir. Bunları işlemek için özel bir şey eklediklerini sanmıyorum.

bu işleme normal aracı

  • a) Sadece seçme gibi bir çift tıklama önce gerçekleşmesi isterdim tek bir tıklama şey yapmak olduğunu.
  • b) Bu bir seçenek değilse, tıklama etkinliğinde bir zamanlayıcı başlatın. Zamanlayıcı işaretinde, tek tıklama eylemini yapın. Çift tıklama olayı önce gerçekleşirse, zamanlayıcıyı öldürün ve çift tıklama eylemini yapın.

Süreyi ayarladığınız süre, sistemin Çift Tıklama süresine eşit olmalıdır (bu, kullanıcının kontrol panelinde belirleyebileceği). System.Windows.Forms.SystemInformation.DoubleClickTime adresinden edinilebilir. tüm ayrıntıları here

+0

Zamanlayıcıyı ayarlarken, kullanıcıların çift tıklama ayarlarında sık sık vidalanabileceğini unutmayın: http://blogs.msdn.com/oldnewthing/archive/2008/10/02/8969396.aspx ... Emin olun Buna uyum sağlamak için, aksi halde bazı garip vakalarda iki katına çıkmadan önce tek tıklamaya sahip olabilirsiniz. –

+0

Bir zamanlayıcı !? Nooooooo! (Tamam, ben pratik olduğunu kabul, ama oldukça değil. Is bu gerçekten tek yolu?) Seçeneğine a Cheers, Rob – Rob

+0

+ 1. Seçenek b yapılabilir, ancak John'un dediği gibi, kötü şeyler olabilir. Senaryonuzda, ilk tıklama = güvenli, ikinci tıklama = tam ekran – mathieu

0

sorun büyük nesneler hem uygulamak kalmamasıdır MSDN'ndaki bulunmaktadır. Tek ve çift tıklamalar için mantıklı olarak farklı eylemlere sahip olabilecek birkaç nesne genellikle çift tıklama eyleminden önce tek tıklatma eylemini çalıştırmak için uygundur (vurgulayın, bir klasörü açın, seçmeden önce adres çubuğuna odak girin, vb.) Belirlenecek yol muhtemelen tek bir tıklama üzerinde bir süre beklemek ve bir çift tıklama tespit edilirse tek bir tıklama için eylemi iptal etmek olacaktır.

-1

OnMouseClick olay işleyicisinde bir zamanlayıcı başlatabilirsiniz.

  • Zamanlayıcı zaman aşımına uğrarsa (300ms diyelim) tek bir tıklama gerekir.

Else

  • Tıklama x & y konumunu inceleyebilseydim başka bir çıkış OnMouseClick olay zamanı zamanlarda önce oluşturulmuştur ise ve eğer onun ardından ilk belirli bir tıklama yarıçap eylem içinde çift ​​tıklama işlevi.

Aksi

  • ilk tıklamayı Kulp ve ikinci tıklama için zamanlayıcı baştan başlatılması

Not: Bu uygulama aslında avantajına sahip olduğunu timeoput ve 'çift hem -Click' yarıçapı/independantly birden fazla makine üzerine alınmak üzere ağırlık/s sağlayan sistem konfigürasyonunun yapılandırılabilir

+0

Ancak kullanıcıların kendi çift tıklama zaman aşımı tercihlerini göz ardı etme dezavantajına sahiptir! – Rob

+0

Bu doğrudur, ancak kullanıcı bağımsız olan tutarlı bir sistem oluşturabileceğiniz anlamına gelir. Sistemin, bir kullanıcının veya birden çok kullanıcının kimler tarafından kullanıldığına inanıyorum. –

0

Başka bir olası çözüm, OnMouseDoubleClick işlevinin OnMouseClick çağrısına sahip olmaktır. OnMouseClick'teki eylem, bir ikili geçiş olduğundan, iki kez çağırmak onu aynı duruma sıfırlar.

kullanıcı çift tıklama, pencereler sonra OnMouseClick, OnMouseDoubleClick çağırır Yani zaman. OnMouseDoubleAramalarBaşlatBir durumu geri yüklemek için (tekrar) tıklayın, ardından çift tıklamayı işler.

Bu çözüm olarak yetersiz hissediyor, ama işe yarıyor. (Çift tıklama ilk tıklamayı yutmak) bir zamanlayıcı kullanarak

eşit tatmin edici değil ve kullanıcının çift tıklama oranı tercihlerini taşıma ilave komplikasyon vardır.

Alkış, Rob

+0

Bunun bile işe yaramayacağından emin değilim.Örneğin: Kullanıcı A'yı tıklatıp B'yi seçip, seçimini kaldırdıktan ve B'yi genişleten B'yi çift tıklatın. Şimdi, B'yi seçtiniz, A'nın seçimini kaldırdınız mı? Eğer öyleyse, sen batırdın. –

+0

Nesneler bağımsız olarak ele alınır, bu nedenle A, B'den bağımsızdır. Uygulamamda, MouseEventArgs aracılığıyla iletilen imleç konumu, hangi görüntünün tıklandığını tanımlamak için kullanılır. – Rob

İlgili konular