Zastanawiam się nad liczeniem pikseli, jeśli formularz jest rzeczywiście przeciągnięty, ale musi być lepszy sposób.
Nie, dokładnie tak trzeba to zrobić.
To nie jest tylko ograniczenie oprogramowania; to także bardzo praktyczne. Jeśli podejmiesz problem z perspektywy użytkownika, natychmiast zobaczysz problem, a także rozwiązanie. Zadaj sobie pytanie, jaka jest różnica między kliknięciem a przeciągnięciem?
Obydwa zaczynają się od naciśnięcia przycisku myszy nad obiektem, ale jeden z nich kończy się kliknięciem myszki w górę nad obiektem w tej samej pozycji, a drugi kończy się po kliknięciu myszką w górę. zupełnie inna pozycja.
Od czasu maszyn jeszcze nie zostały udoskonalone, nie masz możliwości, aby wiedzieć z góry.
Tak, musisz utrzymywać pewien próg odległości, a jeśli wskaźnik porusza się poza próg odległości, gdy znajduje się nad obiektem, to uważasz go za opór. W przeciwnym razie uważasz to za kliknięcie.
Ten próg odległości nie powinien wynosić 0. Użytkownik nie powinien być zmuszony do trzymania myszki całkowicie nieruchomej w celu zainicjowania przeciągnięcia. Wielu użytkowników jest podporządkowanych. Jest bardzo prawdopodobne, że będą lekko drgać podczas próby kliknięcia. Jeśli próg jest równy 0, w końcu spróbują kliknąć, co spowoduje nieumyślne przeciągnięcie.
Oczywiście, nie musisz się o nic martwić ani samodzielnie obliczyć wartości progowej.Zamiast tego użyj wartości domyślnych systemu Windows, które można uzyskać, wywołując funkcję GetSystemMetrics
i podając SM_CXDRAG
lub SM_CYDRAG
. (To może być narażona gdzieś ramami WinForms, ale nie sądzę. To tak samo łatwe do P/Invoke je samodzielnie.)
const int SM_CXDRAG = 68;
const int SM_CYDRAG = 69;
[DllImport("user32.dll")]
static extern int GetSystemMetrics(int index);
Point GetDragThreshold()
{
return new Point(GetSystemMetrics(SM_CXDRAG), GetSystemMetrics(SM_CYDRAG));
}
„liczenie pikseli” jest dość powszechne, ponieważ w większości przypadków rzeczywiście nie chcą ** ** przeciągania odpalać kiedy "odległość ruchu" jest krótsza niż na przykład 7..15 pikseli. Nawet pulpit Windows ma taki próg kilku pikseli. – quetzalcoatl
Nie należy używać opcji 'Kliknąć' i zamiast niej używać' MouseUp'? – Neolisk
Stworzyłem demo i nie dostaję tego zachowania. Po osiągnięciu MouseDown Click. Czy możesz napisać jakiś kod? –