Próbuję wykryć, czy użytkownik nie kliknieje bezpośrednio na suwak, ale gdzieś na pasku toru, gdzie sprawia, że wartość suwaka skakała przez LargeChange nieruchomość. Próbuję uzyskać wartość, którą Suwak był włączony przed wystąpieniem skoku. Na przykład, jeśli suwak jest na wartości 40, a użytkownik sprawia, że przeskakuje do 140, muszę znać wartość początkowa, zanim została zmieniona.

Wiem, że mogę użyć zmiennych, aby śledzić poprzednie wartości, ale mam dużo TrackBars, więc skończę wiele zmiennych, które próbuję uniknąć.

Czy istnieje jakieś zdarzenie dla TrackBar, mogę użyć do wykrywania skoku lub uzyskania wartości początkowej, zanim została zmieniona przez użytkownika? W tej chwili używam imprezy {x1}}, ale to daje mi wartość, gdziekolwiek klikam TrackBar zamiast tego gdzie było.

Mówiąc o tym TrackBar (suwak jest rzeczą, jaką możesz poruszać w lewo i prawy):

enter image description here

0
syy 17 luty 2017, 16:43

2 odpowiedzi

Najlepsza odpowiedź

Rozwiązaniem, które skacze na myśl, jest użycie słownika. Nie chcesz mieć wielu zmiennych , ale słownik jest tylko zmienną . I nie wierzę, że masz tak wiele pasków towarowych, że pamięć dla słownika powinna być problemem.

Więc zadeklaruj członek klasy {x0}} jak

private readonly Dictionary<TrackBar, int> trackBarValue = new Dictionary<TrackBar, int>();

Iw obsługi dla ValueChanged zdarzenia TrackBar s możesz zrobić

private void TrackBarsValueChanged(object sender, EventArgs e)
{
    TrackBar clickedBar = sender as TrackBar;
    if (clickedBar == null) return;

    if (!trackBarValues.ContainsKey(clickedBar))
        trackBarValues[clickedBar] = clickedBar.Value;

    if (Math.Abs(trackBarValues[clickedBar] - clickedBar.Value) > clickedBar.LargeChange)
    {
        // yes, it was a big change
    }

    // store the current value
    trackBarValues[clickedBar] = clickedBar.Value;

}

Nie wiem, czy obecnie masz inny przewodnik dla każdego pojedynczego paska towarowego. Ponieważ oznaczałoby to, że powtórzył ten kod w każdym przewodzie, jest to dobry pomysł, aby dodać ten pojedynczy przewodnik do wydarzeń wszystkich gąsienic.

3
René Vogt 17 luty 2017, 13:55

Zobacz Oto, jak wykonać kod, kiedy zmienne zmiany.

Spróbuj czegoś takiego, ale mieć kod ustawiony coś takiego jak Oldvar równa Trackvar2, Trackvar2 jest wartością TrackBar1 (Twój rzeczywisty TrackBar Int), ale aktualizowano tylko po aktualizacji Oldvar.

Powinno to dać ci, czego chcesz, prawdopodobnie jest prawdopodobnie lepsze rozwiązanie, ale to powinno działać.

1
Community 23 maj 2017, 12:34