2 zależne od siebie numericUpDown - zapetlenie :/

0

Mam taką sytuacje ze chce aktualizować przeliczać wartość "numeriUpDown2" na podstawie wartości "numericUpDown1", ale również chce zachować możliwość aby przeliczać wartość "numericUpDown1" na podstawie zmian w "numericUpDown2".
Coś bardzo podobnego jak jest w menu Paint.NET w zmianie rozmiaru obrazu:

obraz_2021-05-30_184041.png

Jeżeli zaznaczę "zachowaj proporcje" to niezależnie co zmieniam wysokość czy szerokość to to drugie przelicza się na podstawie proporcji.

Jeżeli zrobię to poprzez obsługę zdarzenia "ValueChanged" tych kontrolek to spowoduje zapętlenie nieskończone.

Jak to ogarnąć?

Usiadłem na szybko do WindowsForms, prosty programik maks 500linii, pisze zdarzeniowo i tu się przytkałem, prosiłbym o podpowiedz.

1

A jak sprawdzisz wcześniej wartość drugiej kontrolki i ustaw dopiero jak jest różna?
Wtedy załóżmy, że będzie tak:

  • w pierwszej kontrolce ustawiasz 2
  • oblicza proporcje np. mnożeniem (2*2) i ustawia 4 na drugiej kontrolce
  • druga kontrolka dostaje wartość, ustawia sobie 4
  • oblicza proporcje np. dzieleniem (4/2), sprawdza wartość pierwszej kontrolki i pomijasz odpalenie zdarzenia, bo już pierwsza kontrolka ma wartość 2
2

Jak to ogarnąć?

Na moment "siłowej" modyfikacji drugiej kontrolki musisz odpiąć zdarzenie tej drugiej, albo ustawić flagę która będzie sprawdzana w tym zdarzeniu (i wtedy zdarzenie nic nie robi).

To musi oczywiście działać w obie strony.

2
  1. Innym sposobem, to "osłabić" wydarzenie na mniej dynamiczne, np z Changed na LostFocus.
    Nie zawsze to znajdzie zastosowanie, ale wielokrotnie na formatkach biznesowych tak robiłem

  2. Robiłbym sobie nadzieje, ze jeśli liczby nie siedzą w kontrolkach, a w Modelu, a model jest przybindowany do kontrolek, aktualizacje modelu są jakby mniej "zakłócające". Piszę ogólnie, bo wiele lat nie kodowałem podobnych fragmentów, ale w pamieci się zachowało, ze było dobrze

1 użytkowników online, w tym zalogowanych: 0, gości: 1